2010-11-20 11 views
6

SQLiteテーブルに挿入する必要があるアポストロフィを持つ文字列を考えてみましょう。アポストロフィ付きの文字列値の挿入

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

どのようにマークアップやINSERT文の値にアポストロフィをエスケープすることができますか?

答えて

16

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

あなたは、このような文字列としてクエリに直接入力を渡すべきではありません。それは迷惑であるばかりでなく、Macアプリにとって大きな問題ではないSQLインジェクション攻撃に対しても脆弱ですが、Prepared Statementsを自由に使うことができます。 Prepared Statementは、基本となるデータベースが実際の変更されていない入力値を安全に読み取るようにします。あなたの具体的な例

(簡潔/明確にするため取り除かエラーチェック):

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); 

(未テストが、あなたのアイデアを得ます)。

2

単一のアポストロフィの代わりに ''を使用できます。 https://www.sqlite.org/faq.html#q14

:挿入する
例はない
Insert into table_name values('haven''t');

リファレンスを持っています

関連する問題