我在执行搜索查询时遇到一些问题。我收到这个错误。
SQLSTATE[HY093]:参数号无效
这是我的代码。
<?php
try{
$sql = "SELECT * FROM `character` WHERE `name` LIKE :search OR `play` LIKE :search";
$query = $db->prepare($sql);
$query->execute(array(':search' => strip_tags($_POST['search'])));
$result = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $row){
$name = $row['name'];
$gender = $row['gender'];
$id = $row['id'];
echo "<tr>
<td>". $name ."</td>
<td>". $gender ."</td>
<td><a href='characterbio.php?id=". $id ."'>". $name ."'s Bio Page</a></td>
</tr>";
}
}catch(PDOException $e){
die($e->getMessage());
}
?>
请帮帮我。谢谢!
根据PDO::Prepare
您必须为您想要的每个值包含一个唯一的参数标记
当您调用 PDOStatement::execute() 时传递到语句。你
不能多次使用同名的命名参数标记
准备好的语句,除非仿真模式已打开。
所以要么打开仿真模式
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);
或更改为 -
$sql = "SELECT * FROM `character` WHERE `name` LIKE :search1 OR `play` LIKE :search2";
$query = $db->prepare($sql);
$query->execute(array(':search1' => strip_tags($_POST['search']),':search2' => strip_tags($_POST['search'])));
另外,由于您正在使用LIKE
在您的查询中,您需要添加通配符%
符合你的价值观
$query->execute(array(':search1' => "%".strip_tags($_POST['search'])."%",':search2' => "%".strip_tags($_POST['search'])."%"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)