插入SQLite时如何处理逗号和撇号字符

时间:2012-01-31 14:50:30

标签: c++ qt sqlite

我有包含撇号和逗号的字符串,当我执行插入SQLite时 它给我带来错误,比如这样的字符串:

...., 'The Smiths - I Know It's Over', .....
"Over": syntax error Unable to execute statement

我怎样才能或我能做些什么来保持字符串中的撇号但是预先形成有效的插入? 即时通讯使用Qt c ++。

3 个答案:

答案 0 :(得分:7)

你不应该将任意字符串直接放入SQL中 - 这要求injection attack。相反,使用bound parameters;类似的东西:

sqlite3_stmt * statement;
sqlite3_prepare(db, "select * from students where name=?", -1, &statement, NULL);
sqlite3_bind_text(statement, 1, "'; drop table students --", -1, SQLITE_STATIC);
sqlite3_step(statement);
sqlite3_finalize(statement);

这将使用给定的字符串替换查询中的第一个参数(?),不会将任何'字符解释为字符串的结尾或任何部分的危险字符串作为SQL执行。

答案 1 :(得分:3)

来自FAQ

  

(14)如何使用包含嵌入式单引号(')字符的字符串文字?

     

SQL标准指定通过在行中放入两个单引号来转义字符串中的单引号。 SQL就像Pascal编程语言一样。 SQLite遵循此标准。例如:

     

插入xyz VALUES('5点钟');

答案 2 :(得分:0)

我相信mysql库有一个名为mysql_real_escape_string的函数来转义字符串。此外,您可以使用双引号括起字符串或转义输入字符串的撇号,如'The Smiths - I Know It\'s Over',