0

我正在尝试清理我对 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)
4

2 回答 2

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选项只是添加周围的引号本身。

于 2013-03-21T19:07:15.813 回答
1

根据文档,这是预期的行为。该文件还指出:

作为一般规则,在将文本插入字符串文字时,您应该始终使用 %q 而不是 %s。

于 2013-03-21T19:06:58.317 回答