所以我有一个有趣的问题,我从未遇到过,似乎无法找到有关纠正问题的更多信息。我有庞大的数据库,其中包含大量数据(价值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语句的查询中使用撇号。想法?
答案 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'
)