php bindParam不使用LIKE语句

时间:2015-11-29 13:05:27

标签: php mysql pdo

我通过PDO连接到我的数据库,我准备这个语句,然后绑定参数:

$stmt = $conn->prepare("SELECT * FROM movies WHERE movie_name LIKE '%:mName%'");
$stmt->bindParam(':mName', $moviename); 

它在数据库中找不到任何东西,但如果我这样做,它就有效:

$stmt = $conn->prepare("SELECT * FROM movies WHERE movie_name LIKE '%". $moviename . "%'");

这是完整的代码,如下:

<?php
    function Search_movie(){
            $conn = new PDO('mysql:host=localhost;dbname=cinema;charset=utf8', 'root');
            $moviename = 'cloud'; 

            $stmt = $conn->prepare("SELECT * FROM movies WHERE movie_name LIKE '%:mName%'");
            $stmt->bindParam(':mName', $moviename); 
            var_dump($stmt);
            $stmt->execute();

            $data = $stmt->fetch(PDO::FETCH_ASSOC);

            print "<br>";
            var_dump($data);
    } 

    Search_movie();
?>

有人可以告诉我它为什么会这样运作吗?

1 个答案:

答案 0 :(得分:1)

解决方案是不在查询中包含%,而是在您的参数中,因为它是搜索表达式的一部分而不是&#34;标记&#34; LIKE

$stmt = $conn->prepare("SELECT * FROM movies WHERE movie_name LIKE :mName");
$stmt->bindParam(':mName', '%' . $moviename . '%');

请注意,您不必在参数周围放置简单引号,因为PDO将自行处理此问题。