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语句的查询中使用撇号.思考?
试试看 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)