如何在c中插入sqlite3中的任何字符串

时间:2010-05-31 08:46:22

标签: c sqlite

我必须在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数据库中插入变量 谢谢你

3 个答案:

答案 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_v2sqlite3_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足够大。