单引号可防止bindValue替换占位符标记

时间:2015-05-01 14:58:44

标签: c++ qt sqlite qt5 qtsql

当我使用bindValue准备语句时,如果占位符标记被单引号括起来,则不会替换它。这是有问题的,因为在SQL字符串中用单引号括起来以避免关键字冲突。 一旦插入数据库内容的屏幕,请查看我的附件,一次没有单引号。 我已经报告了bug,但同时我不确定这不仅仅是编码问题。使用单引号是否正确,即这应该是否真的是一个错误?

quoutes enter image description here 没有quoutes enter image description here

1 个答案:

答案 0 :(得分:2)

这不是一个错误。只是不要使用单引号。 bindValue机制不只是用你的语句中的字符串替换你的:path。没有姓名冲突的风险。将其视为某种不同的命名空间。 :-)

http://en.wikipedia.org/wiki/Prepared_statement:准备语句通常通过非SQL二进制协议执行,以提高效率并防止SQL注入,但是一些DBMS(如MySQL)也可以使用SQL语法进行调试。

http://en.wikipedia.org/wiki/SQL_injection#Parameterized_statements:对于大多数开发平台,可以使用与参数一起使用的参数化语句(有时称为占位符或绑定变量),而不是在语句中嵌入用户输入。 占位符只能存储给定类型的值,而不能存储任意SQL片段。因此,SQL注入只会被视为一个奇怪的(可能是无效的)参数值。