SQLSTATE [HY093]:参数号无效

时间:2014-05-12 01:13:19

标签: php mysql sql pdo

我在查找搜索查询时遇到了一些麻烦。我收到这个错误。

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

请帮帮我。谢谢!

1 个答案:

答案 0 :(得分:9)

根据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'])."%"));