mysql请求没有返回想要的东西

时间:2013-11-09 18:26:40

标签: php mysql select phpmyadmin

我在mysql中遇到麻烦...首先我的表有以下条目:

enter image description here

我想猜到为什么Forum des Halles,niveau - 4,rue l \'Orient-Express是重复 我尝试了以下mysql请求:

SELECT * FROM geocode where initial_req LIKE '%Forum des Halles, niveau - 4, rue l\'Orient-Express%'

没有结果

SELECT * FROM geocode where initial_req LIKE "%Forum des Halles, niveau - 4, rue l\'Orient-Express%"

没有结果

SELECT * FROM geocode where initial_req LIKE "%Forum des Halles, niveau - 4, rue l'Orient-Express%"

没有结果

SELECT * FROM geocode where initial_req LIKE "%l\'Orient%"

没有结果

SELECT * FROM geocode where initial_req LIKE "%l\'%"

没有结果

SELECT * FROM geocode where initial_req LIKE "%\'Orient%"

2结果!!!

我不明白为什么!印刷品是完全一样的,似乎l \'没有工作h'Orient正在工作。我对发生的事情感到非常困惑......你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

你的字符串是:

  

... rue l \'Orient ...(包含2个必须在查询中转义的特殊字符)

要与LIKE匹配,你必须使用:

  

'%\\\' 东方%'

因为 \ 必须转义,所以必须使用 \\ ,撇号是必须转义的特殊字符,因此必须表达' \'

就是这样。

除了您的上一次查询,您的模式与 l'Orient 相匹配(并且您的表格中没有此类内容)但您必须匹配 l \'Orient

...您的上一个查询与'Orient 匹配,因此可以正常运行。

BTW:记住这个字符串我把它粘贴到Mysql提示符中 - 如果用于PHP,Java代码等 - 你必须注意字符串在这些语言中的转义,所以你可能需要更多的反斜杠而不是这里所示(两倍多 - 因此你说6个反斜杠适合你 - 所以它在代码中。)

为了确保您的查询看起来像我的 - 在PHP中 - 只需打印它 - 它会向您显示您的反斜杠计数减少2倍,这个数量将在实际查询中 - 而不是您在PHP代码中看到的。

当然 - 如果您使用任何mysql / mysqli转义例程,它将会有所不同;-)并且必须考虑所有这些。

read MYSQL string literals and escaping special chars

<强> Sumary:

如果你在mysql控制台中输入你的查询是不同的故事,不同的是嵌入在PHP中的字符串中,不同的使用转义例程。从mysql提示符开始,如果正常工作,请调整PHP。