我有以下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
(因为它传递了一个字符串而不是整数)
这是运行函数
中$ params的var_dumparray(2) {
[0]=> int(1)
[1]=> string(21) "light-resistance-band"
}
答案 0 :(得分:0)
您可以自定义函数,检查$key
和bindParam的类型,如下所示:
public function run($sql, array $params = NULL) {
$statement = $this->pdo->prepare($sql);
if (!is_null($params)) {
foreach ($params as $key=>$value) {
$statement->bindParam(":".$key, $value);
}
}
$statement->execute();
return $statement->fetchAll(PDO::FETCH_CLASS);
}
答案 1 :(得分:0)
您需要添加 不同的命名占位符来绑定相应的值 (不完全相同)
$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] ]
);