簡體   English   中英

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

[英]How to insert any string in sqlite3 in c

我必須在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數據庫中插入變量謝謝你

不要使用sprintf()而是使用sqlite3_mprintf() 是文檔。

char s[20] = "some string";
char* query = sqlite3_mprintf("insert into tbl5 values ('%q');", s);

否則您有SQL注入的風險。

應使用sqlite3_free()釋放生成的查詢字符串。

另請注意'%q'而不是通常的'%s'

除了已經給出的建議之外,您還可以使用帶有綁定參數的預准備語句(如果您打算使用不同的參數重復多次語句,這也很有用)。 有關更多信息,請參閱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);

您可以使用sprintf創建格式化的字符串。

char s[20] = "some string";
char query[100];
sprintf(query, "insert into tbl5 values (%s);", s);

這取決於你確保query足夠大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM