我正在尝试编写一个SQL查询,但我遇到了问题。当我们想用where子句编写查询以缩小结果范围时,我们可以做
...其中name ='John'
(其中name是表中的一列)。 现在我试图插入一个这样的子句,除了名字是“O'Malley”。所以我认为查询将是
...其中name ='O'Malley'
但这给了我一个空指针异常。 有谁知道如何解决这个问题?
提前感谢您的帮助。
答案 0 :(得分:3)
您的问题是字符串“O'Malley”中的单引号被SQL解释为字符串终止符。要转义单引号,请将其替换为两个单引号,如下所示:
where name = 'O''Malley'
编辑:如果字符串“O'Malley”来自用户输入,则您的代码容易受到SQL injection攻击。要避免此风险,请使用参数化查询。
答案 1 :(得分:2)
使用绑定变量来避免考虑引用问题。 绑定变量要注意sql注入。
答案 2 :(得分:1)
根据数据库,您可以逃避'我认为。看看http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html
答案 3 :(得分:1)
如果在搜索字符串中一起使用两个撇号,SQL将意识到它是字符串的一部分,而不是SQL语法的一部分。
where name = 'O''Malley'