我必须在sqlite数据库中插入一个字符串 我的命令..
Err=sqlite_exec(DB, "create table tbl5(TEXT varchar(100));", xCallback, (void*)"First Test", &ErrMsg);
Err=sqlite_exec(DB, "insert into tbl5 values ('some string');", xCallback, (void*)"First Test", &ErrMsg);
工作正常但我想放s="some string"
即
Err=sqlite_exec(DB, "insert into tbl5 values (s);", xCallback, (void*)"First Test", &ErrMsg);
然后这不起作用所以如何添加变量然后它不工作所以如何在sqlite数据库中插入变量 谢谢你
答案 0 :(得分:6)
请勿使用sprintf()
,sqlite3_mprintf()
。 Here是文档。
char s[20] = "some string";
char* query = sqlite3_mprintf("insert into tbl5 values ('%q');", s);
否则您将面临SQL injection的风险。
应使用sqlite3_free()
释放生成的查询字符串。
另请注意'%q'
,而不是通常的'%s'
。
答案 1 :(得分:2)
除了已经给出的建议之外,您还可以使用带有绑定参数的预处理语句(如果您打算使用不同的参数重复多次语句,这也很有用)。有关详细信息,请参阅sqlite3_prepare_v2
和sqlite3_bind_*
sqlite3_stmt *stmt;
// Create a prepared statement.
Err = sqlite3_prepare_v2(DB, "insert into tbl5 values (?)", -1, &stmt, NULL);
if (Err != SQLITE_OK)
{
//...
}
// Bind our string to the statement.
Err = sqlite3_bind_text(stmt, 1, "some string", -1, SQLITE_TRANSIENT);
if (Err != SQLITE_OK)
{
//...
}
// Execute the statement.
Err = sqlite3_step(stmt);
if (Err != SQLITE_DONE)
{
//...
}
// Free the prepared statement.
Err = sqlite3_finalize(stmt);
答案 2 :(得分:0)
您可以使用sprintf
创建格式化字符串。
char s[20] = "some string";
char query[100];
sprintf(query, "insert into tbl5 values (%s);", s);
由您来确保query
足够大。