【发布时间】:2011-05-12 23:04:12
【问题描述】:
考虑一个需要插入到 SQLite 表中的带有撇号的字符串。
INSERT INTO myTable ( table_Title TEXT ) VALUES ( 'world's' )
如何在INSERT 语句的值中标记或转义撇号?
【问题讨论】:
标签: iphone objective-c sqlite
考虑一个需要插入到 SQLite 表中的带有撇号的字符串。
INSERT INTO myTable ( table_Title TEXT ) VALUES ( 'world's' )
如何在INSERT 语句的值中标记或转义撇号?
【问题讨论】:
标签: iphone objective-c sqlite
http://www.sqlite.org/c3ref/bind_blob.html
您不应该像这样将输入作为字符串直接传递到查询中。它不仅令人讨厌,而且还容易受到 SQL 注入攻击,这对于 Mac 应用程序来说可能不是一个大问题,但当您使用准备好的语句时仍然是一个坏主意。准备好的语句确保底层数据库安全地读取实际的、未修改的输入值。
对于您的具体示例(为简洁/清晰起见,删除了错误检查):
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);
(未经测试,但你明白了)。
【讨论】:
您可以使用 '' 而不是单个撇号。
插入示例还没有Insert into table_name values('haven''t');
【讨论】: