我正在尝试清理我对SQLite数据库的输入,并且我正在使用sqlite3_mprintf
来完成它,但我得到了一些奇怪的结果。我尝试了不同的变化,我做错了吗?
const char * zChar = "It's a nice day";
cout << sqlite3_mprintf("INSERT INTO table(col1) VALUES('%Q')", zChar) << endl;
//INSERT INTO table(col1) VALUES(''It''s a nice day'')
cout << sqlite3_mprintf("INSERT INTO table(col1) VALUES(%Q)", zChar) << endl;
//INSERT INTO table(col1) VALUES('It''s a nice day')
cout << sqlite3_mprintf("INSERT INTO table(col1) VALUES('%q')", zChar) << endl;
//INSERT INTO table(col1) VALUES('It''s a nice day')
cout << sqlite3_mprintf("INSERT INTO table(col1) VALUES(%q)", zChar) << endl;
//INSERT INTO table(col1) VALUES(It''s a nice day)
答案 0 :(得分:3)
sqlite3_mprintf("INSERT INTO table(col1) VALUES(%Q)", zChar)
//INSERT INTO table(col1) VALUES('It''s a nice day')
sqlite3_mprintf("INSERT INTO table(col1) VALUES('%q')", zChar)
//INSERT INTO table(col1) VALUES('It''s a nice day')
这些都是正确的。 ''
是一个转义报价。 %Q
选项只会添加周围的引号本身。
答案 1 :(得分:1)
根据the documentation,这是预期的行为。该文件还指出:
作为一般规则,您应该始终使用%q而不是%s 将文本插入字符串文字。