替换mySQL中包含引号的单词时出错

时间:2009-09-11 09:07:33

标签: sql mysql sql-injection

我已经更新了许多记录,但当涉及到包含引号的单词时,我收到此错误:“错误:未公开引用@ 1357”

我知道为什么它会给我这个错误,我只是不知道如何解决它。

以下是一个示例: UPDATE invnum SET cAccountName =替换(cAccountName,'JOHN'S','BEN')

提前致谢。

3 个答案:

答案 0 :(得分:2)

在字符串中转义引号:

UPDATE invnum SET cAccountName = replace(cAccountName,'JOHN\'S','BEN')

您希望对此非常小心 - 不正确处理此问题是SQL injection attacks的来源,并且是安全问题的主要来源。

答案 1 :(得分:2)

如果您使用脚本更新记录,请使用内置转义函数。对于PHP将是mysql_real_escape_string

答案 2 :(得分:0)

请改为尝试:

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\""

等等。