sqlite3_bind_****
int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*));
sqlite3_bind_text是slite3_bind家族的一员。作用是将sqlite3_prepare_v2 中sql语句里的占为符 ? 替换成变量。
第一个参数是从sqlite3_prepare_v2中返回的stmt结构的指针pStmt;
第二个参数是要替换占位符的坐标,从1开始;
第三个参数是要替换的变量;
第四个参数简单使用写成-1;
第五个参数简单使用写成nullptr 或 SQLITE_STATIC。
使用这个API可以防止sql注入(会把占位符当成一个变量插入到表中)。
在大量更新,插入数据时,也非常高效。一般流程如下:
sqlite3_prepare_v2();
for(data : row){
sqlite3_bind_**(...data1...);
sqlite3_bind_**(...data2...);
....
sqlite3_step();
sqlite3_reset();
}
sqlite3_finalize()
简单实例
#include <iostream>
#include <stdio.h>
#include "sqlite3.h"
using namespace std;
int main()
{
const char *name = "jojo";
const char *password = "123456";
sqlite3 *db;
sqlite3_stmt *pStmt;
int rv;
rv = sqlite3_open("./mdata.db", &db);
if(rv != SQLITE_OK)
goto error_exit;
rv = sqlite3_prepare_v2(db, "insert into players values(?,?)", -1, &pStmt, nullptr);
if(rv != SQLITE_OK)
goto error_exit2;
rv = sqlite3_bind_text(pStmt, 1, name, -1, SQLITE_STATIC);
if(rv != SQLITE_OK)
goto error_exit2;
rv = sqlite3_bind_text(pStmt, 2, password, -1, SQLITE_STATIC);
if(rv != SQLITE_OK)
goto error_exit2;
rv = sqlite3_step(pStmt);
if(rv != SQLITE_DONE)
goto error_exit2;
sqlite3_finalize(pStmt);
sqlite3_close;
return 0;
error_exit:
sqlite3_close(db);
fprintf(stderr, "can't open dbn");
return -1;
error_exit2:
sqlite3_finalize(pStmt);
sqlite3_close(db);
fprintf(stderr, "run errorn");
return -2;
}
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!