我有下面的 PDO 函数来执行 Mysql 查询。它对于所有查询都能正常工作。
public function run($sql, array $params = NULL) {
$statement = $this->pdo->prepare($sql);
if (!is_null($params)) {
foreach ($params as $key) {
$statement->bindParam(":n", $key);
}
}
$statement->execute();
return $statement->fetchAll(PDO::FETCH_CLASS);
}
但是,当我运行以下查询时,它返回一个空集
$variation = $query->run(
"SELECT url, title, sale_price
FROM product
where category_id = :n
and url != :n",
[ $data[0]->category_id, $filePathArray[1] ]
);
当我在 mysql 客户端中手动运行查询时,它可以工作。
我尝试对类别 ID 进行类型转换,但没有任何乐趣:
(int)$data[0]->category_id
(因为它传递的是字符串而不是整数)
这是 run 函数中 $params 的 var_dump
array(2) {
[0]=> int(1)
[1]=> string(21) "light-resistance-band"
}
最佳答案
您需要添加不同的命名占位符来绑定(bind)相应的值(不相同)
$variation = $query->run(
"SELECT url, title, sale_price
FROM product
where category_id = :n
and url != :n1",
[ ':n'=>$data[0]->category_id, ':n1'=>$filePathArray[1] ]
);
关于php - PDO 准备好的语句返回空集,查询工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48223027/