Mysqli喜欢不使用撇号?

时间:2016-03-27 08:42:20

标签: php mysql mysqli

当我使用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()){

为什么这不能正常工作?

1 个答案:

答案 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();

然后相应地更改插入代码,使其不向数据添加任何额外字符。