当我使用mysqli函数在数据库中搜索带有'(撇号)的特定字符串时,它永远不会找到结果,尽管它在数据库中完全相同。
例如:我搜索:dawn's,它通过real_escape转义到:dawn \'s,这与数据库中的相同(它也被放入数据库中进行转义)。但它仍然没有给我一个结果。
这是我使用的代码:
$mysqli = goConnect(); $query = $mysqli->real_escape_string($query); if(!($stmt = $mysqli->prepare("SELECT * FROM movies WHERE title LIKE '%$query%'"))){ http_response_code(400); echo "<p class='results'>Cannot prepare the statement, please try again later.</p>"; } echo $query; if($stmt->execute()){
为什么这不能正常工作?
答案 0 :(得分:0)
Mysqli没有LIKE运算符,Mysql LIKE可以与任何字符一起使用,包括撇号。
,这与数据库中的相同(它也在数据库中进行转义)。
这就是你做错了。它在数据库中不应该是相同的。它应该按原样存储。
此外,您应始终始终使用占位符替换查询中的变量。如果你使用它们,你永远不会遇到这样的问题。
所以,首先将此代码更改为
$mysqli = goConnect();
$stmt = $mysqli->prepare("SELECT * FROM movies WHERE title LIKE ?");
$query = "%$query%";
$stmt->bind_param("s", $query);
$stmt->execute();
然后相应地更改插入代码,使其不向数据添加任何额外字符。