0

我在 mysql 中的请求遇到问题...首先我的表有以下条目:

在此处输入图像描述

我试图猜测为什么 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\' ain't working heile \'Orient is working。我真的对发生的事情感到困惑......你能帮帮我吗?

4

1 回答 1

0

你的字符串是:

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

要将其与 LIKE 匹配,您必须使用:

'%\\\'东方%'

因为\必须被转义,你必须使用\\并且撇号是一个特殊的字符,也必须被转义,所以'必须表示为\'

就这样。

所以除了你的最后一个查询你的模式匹配l'Orient(你的表中没有这样的东西)但你必须匹配l\'Orient

...并且您的最后一个查询匹配'Orient因此它有效。

顺便说一句:请记住,我给你的这个字符串要粘贴到 Mysql 提示符中 - 如果从 PHP、Java 代码等中使用 - 你也必须注意这些语言中的字符串转义,所以你可能需要比这里显示的更多的反斜杠(两倍- 因此你说 6 个反斜杠对你有用 - 所以它在代码中)。

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

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

读取 MYSQL 字符串文字并转义特殊字符

总结:

如果您在 mysql 控制台中输入查询,则不同的故事,如果嵌入在 PHP 中的字符串中,不同的 fi 是否使用转义例程。从 mysql 提示符开始并在你的 PHP 中进行调整(如果工作)。

于 2013-11-09T18:44:14.453 回答