我有一个执行Mysql查询的PDO函数。
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);
}
这仅适用于单个参数(请参阅我的previous question)
所以我尝试将函数中的foreach修改为
foreach ($params as $key => $value) {
$statement->bindParam($key, $value);
}
我将查询作为
运行$variation = $query->run(
"SELECT url, title, sale_price
FROM product
where category_id = :category
and url != :url",
[ ":category" => $data[0]->category_id, ":url" => $filePathArray[1] ]
);
返回一个空集。
答案 0 :(得分:0)
此功能不是必需的。您可以按照in the documentation for PDOStatement::execute()所解释的那样将参数数组直接传递给$statement->execute()
。
它与使用bindParam()
一样安全,它可以防止SQL注入。
唯一的缺点是你不能指定每个参数的类型,但在大多数情况下这不是必需的,在这个例子中你还没有使用它,所以你不会丢失任何东西。