【发布时间】:2009-09-11 09:07:33
【问题描述】:
我已经更新了很多记录,但是当涉及到一个包含引号的单词时,我得到了这个错误:“错误:未闭合的引用 @ 1357”
我知道它为什么给我这个错误,我只是不知道如何解决它。
这是一个示例:
更新 invnum SET cAccountName = replace(cAccountName,'JOHN'S','BEN')
提前致谢。
【问题讨论】:
标签: sql mysql sql-injection
我已经更新了很多记录,但是当涉及到一个包含引号的单词时,我得到了这个错误:“错误:未闭合的引用 @ 1357”
我知道它为什么给我这个错误,我只是不知道如何解决它。
这是一个示例:
更新 invnum SET cAccountName = replace(cAccountName,'JOHN'S','BEN')
提前致谢。
【问题讨论】:
标签: sql mysql sql-injection
字符串中的转义引号:
UPDATE invnum SET cAccountName = replace(cAccountName,'JOHN\'S','BEN')
您需要非常小心 - 处理不当是SQL injection attacks 的根源,也是安全问题的主要根源。
【讨论】:
如果您使用脚本更新记录,请使用内置转义函数。对于 php 那将是 mysql_real_escape_string
【讨论】:
试试这个:
UPDATE invnum SET cAccountName = replace(cAccountName,"JOHN'S","BEN")
如果你需要在一个字符串中同时使用这两种类型的引号,那么当它们出现在字符串中时,你需要转义你用来包围字符串的引号类型(否则 SQL 解释器会认为字符串在它之前结束确实如此。
例如:
Johns becomes "Johns"
John's becomes "John's" or 'John\'s'
"John" becomes '"John"' or "\"John\""
等等。
【讨论】: