使用IN和LIKE运算符的PDO语句

时间:2014-05-04 23:40:20

标签: php pdo

        $in = implode(',', array_fill(0, count($folioIds), '?'));

        $statement = $this->connection->prepare("SELECT * FROM page WHERE folio_id IN(". $in .") AND content LIKE ?");

        foreach ($folioIds as $k => $id) {
            $statement->bindValue($k+1, $id);
        }
        $statement->bindValue($k+1, "%" . $q . "%");

        if($statement->execute()) {
            print_r($statement->fetchAll());
            $statement->debugDumpParams();
        }

我试图在查询中同时使用In和Like运算符,并且它会抛出无效的令牌数错误。

Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' 

我们也可以同时使用named和?参数,我尝试使用它也失败了。

1 个答案:

答案 0 :(得分:0)

我认为$kforeach循环

之外未定义

这可能更容易:

 $statement = $this->connection->prepare(
        "SELECT * FROM page WHERE folio_id IN(". $in .") AND content LIKE ?");
 $values=$folioIds;
 $values[]="%" . $q . "%";
 if ($statement->execute($values)){
    $rows=$statement->fetchAll();
 }