我通过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();
?>
有人可以告诉我它为什么会这样运作吗?
答案 0 :(得分:1)
解决方案是不在查询中包含%
,而是在您的参数中,因为它是搜索表达式的一部分而不是&#34;标记&#34; LIKE
:
$stmt = $conn->prepare("SELECT * FROM movies WHERE movie_name LIKE :mName");
$stmt->bindParam(':mName', '%' . $moviename . '%');
请注意,您不必在参数周围放置简单引号,因为PDO将自行处理此问题。