一个非常奇怪的Apostrophes MySQL PHP错误

时间:2010-06-21 16:49:19

标签: php mysql apostrophe

另一个脑筋急转弯。

这不是通常的“但Apostrophes打破了我的查询”,因为我知道所有关于逃避和消毒的事情,所以我也会说得对。

很多东西都存储在一个名为“刺客”和“宝贝”之类的数据库中,这些名字最终成为“刺客”和“宝贝”,恢复很好但是通过文本搜索是......痛苦的

LIKE“%Babe \'s%”没有结果,“%Babe \\'s”没有结果,“%Babe \'s”没有结果。

但如果我直接去服务器那么他们都会产生结果。

换句话说,完全未编辑的SAME查询将直接在MySQL引擎中工作,但是通过php的mysql api发送它不会产生匹配的结果。

任何可能导致此问题的想法? (我已经检查了100次斜线数量等,是否存在字符集问题?“

很多很多人都提前感谢。

编辑:

我想我最好让自己更清楚:

"SELECT title FROM games WHERE title LIKE "%assassin\\\'s%";(因为SQL应该逃避撇号,其中一个斜杠将变成存储的斜杠,因为我们在这个例子中寻找“刺客信条”)

edit2:播种我们已经发现这是由于在消毒不良造成的实际数据包中逃脱逃逸造成的。目前我正在尝试清理db和输入法。

edit3:似乎魔法引用不知何故......我发誓这是关闭的!然而,不只是这样。适用于此站点的DB包装器具有干净事件以及导致该问题的预清理。现在已经修复了,现在我正在运行一个脚本(希望)清理db ...

5 个答案:

答案 0 :(得分:5)

我会认真考虑修复数据库中的数据。

现在,话虽如此,MySQL将\'''识别为转义撇号。也就是说,除非将服务器模式设置为使用严格SQL,否则只能识别''

数据肯定会在输入时被双重转义,很可能是在用户输入时(magic_quotes_gpc使用addslashes)并且mysql_real_escape_string再次通过{{3}}它

这会将Assassin's Creed变为Assassin\\\'s Creed,最终会将其存储为Assassin\'s Creed

我强烈建议您尽可能禁用magic_quotes_gpc,因为它会导致更多问题,而不是修复问题。

答案 1 :(得分:1)

您是否尝试使用mysql_real_escape_string,同时检查magic_quotes是否已启用并弄乱字符串

答案 2 :(得分:1)

当您转义撇号以便将其存储在MySQL中时,不会存储反斜杠。

所以试试这个:

SELECT title FROM games WHERE title LIKE "%assassin\'s%";

而不是:

SELECT title FROM games WHERE title LIKE "%assassin\\\'s%";

答案 3 :(得分:0)

SELECT title FROM games WHERE title REGEXP“assassin \'s”;

将REGEXP视为MySql中更强大,更不挑剔的“LIKE”....不是全部,最终,而是商店中另一个很酷的工具。

答案 4 :(得分:-1)

作为文档says,LIKE和REGEXP子句中的斜杠必须加倍

编辑:错误的链接已更正