$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和?参数,我尝试使用它也失败了。
答案 0 :(得分:0)
我认为$k
在foreach
循环
这可能更容易:
$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();
}