当前位置: 首页 > news >正文

门户网站制作公司制作网页整体规划方案

门户网站制作公司,制作网页整体规划方案,手机制作网页,怎么做好网站搜索引擎优化返回目录#xff1a;SQLite—免费开源数据库系列文章目录 上一篇#xff1a;SQLiteC/C接口详细介绍之sqlite3类#xff08;十四#xff09; 下一篇#xff1a;SQLiteC/C接口详细介绍之sqlite3类#xff08;十六#xff09; 47.sqlite3_set_authorizer 用法#xff… 返回目录SQLite—免费开源数据库系列文章目录  上一篇SQLiteC/C接口详细介绍之sqlite3类十四 下一篇SQLiteC/C接口详细介绍之sqlite3类十六 47.sqlite3_set_authorizer 用法在SQLite的访问控制中注册一个授权回调函数用于限制或禁止某些SQL语句的执行。 函数原型如下 int sqlite3_set_authorizer(sqlite3*,int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),void* pUserData ); - 第一个参数是数据库连接的指针 - 第二个参数是一个回调函数指针该回调函数是访问授权的核心用于审批或拒绝SQL语句的执行 - 第三个参数是用户带的指针该指针可以在回调函数中使用 回调函数的原型如下 int my_authorizer_callback(void* pArg, int eCode, const char* zDb, const char* zPtr1, const char* zPtr2, const char* zPtr3); - 第一个参数是user-data指针 - 第二个参数是一个SQLITE_AUTH_*常量指示某个SQL语句属于何种类型操作比如是SELECT、INSERT等等。 - 后面的参数zDbzPtr1zPtr2zPtr3指向与用户访问有关的数据库、表、列或者索引的名称。这四个参数不一定全部被用到取决于具体的SQL语句类型。 返回值如下 - 如果回调函数返回SQLITE_DENY则表示不允许执行这条SQL语句。 - 如果回调函数返回SQLITE_IGNORE则表示通过SQL语句的执行但是不允许修改具体的数据库数据。 - 如果回调函数返回SQLITE_OK则表示允许执行这条SQL语句。 下面是一个简单的示例回调函数阻止DROP TABLE、DROP VIEW和DELETE语句的执行 #include sqlite3.h #include stdio.h int authorizer_callback(void* pArg, int eCode, const char* zDb, const char* zPtr1, const char* zPtr2, const char* zPtr3) {if (eCode SQLITE_DROP_TABLE || eCode SQLITE_DROP_VIEW || eCode SQLITE_DELETE) {printf(Unauthorized Operation\n);return SQLITE_DENY;}return SQLITE_OK; } int main() {sqlite3 *db;sqlite3_open(:memory:, db);sqlite3_set_authorizer(db, authorizer_callback, NULL);sqlite3_exec(db, CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT), NULL, NULL, NULL);sqlite3_exec(db, INSERT INTO test VALUES (1, hello), NULL, NULL, NULL);sqlite3_exec(db, DELETE FROM test WHERE id 1, NULL, NULL, NULL);sqlite3_exec(db, DROP TABLE test, NULL, NULL, NULL);sqlite3_close(db);return 0; } 当执行DROP TABLE、DROP VIEW和DELETE语句时回调函数将阻止执行并输出Unauthorized Operation。需要注意的是要在执行SQL语句之前设置授权回调函数否则将无法生效。 48.sqlite3_set_clientdata sqlite3_set_clientdata函数用于在SQLite的会话中为客户端数据设置指针该指针可以在SQLite操作期间使用并永久存储。这个指针通常被用于存储客户端上下文数据比如在回调函数中访问。 函数原型如下 void sqlite3_set_clientdata(sqlite3_context*, void*); 函数使用较为简单第一个参数是指向sqlite3_context结构体的指针这个指针通常由回调函数提供。第二个参数是一个void类型的指针这个指针将与sqlite3_context结构体关联。 下面是一个示例展示如何在sqlite3_create_function()回调函数中使用sqlite3_set_clientdata()来存储客户端上下文数据 #include sqlite3.h #include stdio.h static void my_function(sqlite3_context *context,int argc,sqlite3_value **argv ) {int count (int)(intptr_t)sqlite3_get_auxdata(context, 0);  // 从上下文中获取计数器count;                                                      // 计数器加1sqlite3_set_auxdata(context, 0, (void*)(intptr_t)count);      // 将计数器放回上下文中sqlite3_result_int(context, count);                           // 返回计数器值 } int main() {sqlite3 *db;sqlite3_open(:memory:, db);sqlite3_create_function(db, my_function, -1, SQLITE_ANY, NULL, my_function, NULL, NULL);void *pUserData malloc(sizeof(int));*(int*)pUserData 0;sqlite3_set_auxdata(db, 0, pUserData);  // 将计数器存储在数据库连接中sqlite3_context *context sqlite3_malloc(sizeof(sqlite3_context));sqlite3_set_clientdata(context, db);   // 将数据库连接与上下文关联sqlite3_exec(db, SELECT my_function(), NULL, NULL, NULL);sqlite3_exec(db, SELECT my_function(), NULL, NULL, NULL);int count (int)(intptr_t)sqlite3_get_auxdata(db, 0);printf(function called %d times\n, count);sqlite3_close(db);return 0; } 该示例通过sqlite3_set_auxdata()函数在数据库连接中存储一个计数器。每次调用my_function()回调函数时它将自加该计数器并返回该计数器。用sqlite3_set_clientdata()函数将上下文与数据库连接关联。最后从数据库连接中获取计数器并输出结果。 49.sqlite3_set_last_insert_rowid sqlite3_set_last_insert_rowid函数用于手动设置最后插入的行ID。通常情况下SQLite会自动维护最后插入的行ID无需手动设置。但是有时候可能需要在想要插入的ID不是递增的情况下手动指定插入行ID。 函数原型如下 void sqlite3_set_last_insert_rowid(sqlite3*, sqlite3_int64); 第一个参数是指向sqlite3结构体的指针第二个参数是一个sqlite3_int64类型的整数代表要设置的最后插入的行ID。 下面是一个示例展示如何手动设置最后插入的行ID #include sqlite3.h #include stdio.h int main() {sqlite3 *db;sqlite3_open(:memory:, db);sqlite3_exec(db, CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT), NULL, NULL, NULL);sqlite3_int64 rowid 10;sqlite3_set_last_insert_rowid(db, rowid);   // 设置最后插入的行IDsqlite3_exec(db, INSERT INTO test (id, value) VALUES (11, hello), NULL, NULL, NULL);rowid sqlite3_last_insert_rowid(db);      // 获取最后插入的行IDprintf(last_insert_rowid %lld\n, rowid);sqlite3_close(db);return 0; } 在该示例中我们使用sqlite3_set_last_insert_rowid()函数手动设置了最后插入的行ID为10然后插入一条ID为11的数据。最后我们获取最后插入的行ID并将其输出。输出结果为last_insert_rowid 10。
http://www.w-s-a.com/news/256199/

相关文章:

  • 佛山网站定制开发星光影视园网站建设案例
  • wordpress子站点商务网页设计与制作微课版答案
  • 山东省住房城乡和建设厅网站软件开发主要几个步骤
  • 可以接项目做的网站网站源码php
  • 杭州广众建设工程有限公司网站网页游戏人气排行榜
  • 上海网站开发建设最简单的网站代码
  • 东莞做网站建设免费网站建设案例
  • 莱州建设局网站wordpress的主题下载地址
  • 二级网站域名长沙企业关键词优化服务质量
  • 在家有电脑怎么做网站wordpress 入门主题
  • 什邡建设局网站sem推广是什么意思
  • 西安分类信息网站网站敏感关键词
  • 黑彩网站怎么做建设网站费用分析
  • 网站关键词选取的步骤和方法小程序商城哪家好排行榜
  • 儿童产品网站建设网站建设优化排名推广
  • 做网站的硬件无锡招标网官方网站
  • 做推送好用的网站合肥网站推广培训
  • 网站开发团队简介贵阳双龙区建设局网站
  • 新乡做网站公司哪家好wordpress侧边栏文件
  • 小白建站怎么撤销网站备案
  • 哪个网站做调查问卷赚钱短视频制作神器
  • 上海企业响应式网站建设推荐汕头网络优化排名
  • 怎么建立公司网站平台怎么将网站做成公司官网
  • 培训学校网站怎样快速建设网站模板
  • 建设电子商务网站论文云服务器安装wordpress
  • 做展板好的网站学校的网站开发过程
  • 宁波搭建网站价格西部数码网站正在建设中是什么意思
  • 吉林省建设项目招标网站苏州网络推广定制
  • 网站域名所有权证明引流推广接单
  • 做网站百度百科孟州网站建设