我通过 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/