2010-11-20 122 views
6

考慮帶有需要插入到SQLite表中的撇號的字符串。用撇號插入字符串值

INSERT INTO myTable (table_Title TEXT) VALUES ('world's') 

如何在INSERT聲明中標記或跳出撇號值?

回答

16

http://www.sqlite.org/c3ref/bind_blob.html

你不應該通過直接輸入到查詢作爲這樣的字符串。這不僅是一個麻煩,它也容易受到SQL注入攻擊的影響,這對Mac應用程序來說可能不是一個大問題,但是當您準備好了Prepared Statements時,仍然是一個糟糕的主意。準備好的語句確保底層數據庫安全地讀取實際的,未經修改的輸入值。

針對您的特殊例子(爲了簡潔/透明度檢查刪除錯誤):

sqlite3 *db; 
sqlite3_open("test.db", &db); 

// Create a prepared statement 
sqlite3_stmt *stmt; 
const char *sql = "INSERT INTO myTable (table_Title TEXT) VALUES (?)"; 
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); 

// Bind the parameter (safely) 
sqlite3_bind_text(stmt, 1, "world's", -1, NULL); 

// Execute the prepared statement 
sqlite3_step(stmt); 

(未經測試,但你的想法)。