6

所以我有一个有趣的问题,我从来没有遇到过,而且似乎找不到很多关于纠正这个问题的信息。我有一个庞大的数据库,其中包含大量数据(价值 10 年),并试图通过它进行搜索。

现在搜索的东西工作正常,但如果你愿意的话,最近有人提请我注意一个“错误”。我试图对其进行故障排除以获得预期的结果,但无济于事。

这是我的问题:

当有人在搜索中使用撇号时,并不是搜索失败,而是没有返回任何结果。因此,例如在搜索Pete's查询时执行但不返回任何内容。是的,我确保查询具有 mysql_real_escape_string() 以便Pete's变为Pete\'s.

即使我尝试使用 phpmysql 的搜索功能查询它,我也会得到奇怪的结果。该查询旨在如下所示:

SELECT * FROM  `smd_article` WHERE  `copy` LIKE  '%Pete\'s%'

但是当我在 phpmyadmin 中使用搜索功能时,它给了我:

SELECT * FROM  `smd_article` WHERE  `copy` LIKE  '%Pete''s%'

当我实际在 sql 选项卡中输入查询时,它仍然没有返回任何结果。但是当我只使用 Pete 时会返回一些 17K 记录,而当我只使用 Petes 时会返回一些 3k 记录。

所以我很好奇我做错了什么,或者错过了什么,以便它可以允许在使用 LIKE 语句的查询中使用撇号。想法?

4

2 回答 2

5

试一试mysql_real_escape_string

LIKE '%" . mysql_real_escape_string($find) . "%' 

或者

 LIKE  '%Pete%27s%'

或者如果你使用 pdo 你可以这样做

$search ='Pete\'s'
$stmt = $db->prepare("SELECT * FROM  `smd_article` WHERE  `copy` LIKE ?");
$stmt->bindValue(1, "%$search%", PDO::PARAM_STR);
$stmt->execute();
于 2013-02-01T17:07:41.263 回答
1

问题不是因为'单引号。你正确地逃脱了它。(作为 phpmyadmin 中的搜索功能):

字符串:Pete's

MySQL:“皮特”的

因此,以下查询将起作用。(我已经测试过了)

SELECT *
FROM `smd_article`
WHERE copy
LIKE '%Pete''s%'

你也可以看看IN声明:

SELECT *
FROM `smd_article`
WHERE copy
IN (
 'Pete', 'Pete''s'
)
于 2013-02-01T17:09:03.410 回答