我有一个数据库,其中包含 John Doe 等姓名。不幸的是,其中一些姓名包含引号,例如 Keiran O'Keefe。现在,当我尝试搜索此类名称时,如下所示:
SELECT * FROM PEOPLE WHERE SURNAME='O'Keefe'
我(可以理解)收到一个错误。
我该如何防止此错误发生。我正在使用 Oracle 和 PLSQL。
转义字符是 ',因此您需要用两个引号替换引号。
例如,
SELECT * FROM PEOPLE WHERE SURNAME='O'Keefe'
becomes
SELECT * FROM PEOPLE WHERE SURNAME='O''Keefe'
也就是说,您自己这样做可能是不正确的。您的语言可能具有转义字符串以便在 SQL 中使用的功能,但更好的选择是使用参数。通常其工作原理如下。
你的 SQL 命令是:
SELECT * FROM PEOPLE WHERE SURNAME=?
然后,当您执行它时,您传入“O'Keefe”作为参数。
因为 SQL 是在设置参数值之前解析的,所以参数值无法改变 SQL 的结构(如果您想使用不同的参数多次运行相同的语句,甚至会更快一点)。
我还应该指出,虽然您的示例只会导致错误,但如果不适当地转义字符串,您就会面临许多其他问题。看http://en.wikipedia.org/wiki/SQL_injection http://en.wikipedia.org/wiki/SQL_injection一个好的起点或以下经典xkcd漫画 http://xkcd.com/327/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)