使用LIKE和撇号的Mysql查询问题

时间:2013-02-01 17:02:05

标签: php mysql database

所以我有一个有趣的问题,我从未遇到过,似乎无法找到有关纠正问题的更多信息。我有庞大的数据库,其中包含大量数据(价值10年),并尝试搜索它。

现在搜索的东西工作得很好,但是如果你愿意的话,最近有人提请我注意一个'bug'。我试图解决它以获得预期的结果,但无济于事。

这是我的问题:

当有人在搜索中使用撇号时,并不是搜索出错,而是返回没有结果。因此,例如,当搜索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语句的查询中使用撇号。想法?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

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

  

字符串:皮特的

     

MySQL:'Pete'的'

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

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

您还可以查看IN声明:

SELECT *
FROM `smd_article`
WHERE copy
IN (
 'Pete', 'Pete''s'
)