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

MrT*_*hie 6 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%'
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM  `smd_article` WHERE  `copy` LIKE  '%Pete''s%'
Run Code Online (Sandbox Code Playgroud)

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

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

Nul*_*teя 5

试试看 mysql_real_escape_string

LIKE '%" . mysql_real_escape_string($find) . "%' 
Run Code Online (Sandbox Code Playgroud)

要么

 LIKE  '%Pete%27s%'
Run Code Online (Sandbox Code Playgroud)

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

$search ='Pete\'s'
$stmt = $db->prepare("SELECT * FROM  `smd_article` WHERE  `copy` LIKE ?");
$stmt->bindValue(1, "%$search%", PDO::PARAM_STR);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)