php bindParam 不适用于 LIKE 语句

标签 php mysql pdo

我通过 PDO 连接到我的数据库,我正在准备此语句,然后绑定(bind)参数:

$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();
?>

谁能告诉我为什么会这样?

最佳答案

解决方案是不在查询中包含 % 而是在参数中包含,因为它是搜索表达式的一部分,而不是 LIKE 的“标志” :

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

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

关于php bindParam 不适用于 LIKE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983101/

相关文章:

php - BibTeX格式查询

PHP获取http url并返回https url

php - 从数据库返回 Html/Php 代码

php - 如何使用 php 检索数据类别明智?

mysql - 使用 MSSQL 数据库和 MySQL 数据库

PHP PDO + Sqlite,在表上显示索引

php - 如何在 Laravel 4 中查询除一个以外的所有内容?

mysql - 在排序语句中引用 "count"列的正确方法

php - 批量插入/更新 PDO MySQL 查询

php - PDO - 具有数组方面的 Foreach