下面是执行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);
}
这只适用于单个参数(请参阅我的上一个问题)
所以我试着修改函数中的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] ]
);
它返回一个空集。
1条答案
按热度按时间ryhaxcpt1#
此功能不是必需的。可以将参数数组直接传递给
$statement->execute()
如pdostatement::execute()文档中所述。它和使用一样安全
bindParam()
,它同样可以防止sql注入。唯一的缺点是不能指定每个参数的类型,但在大多数情况下这不是必需的,在本例中,您没有使用它,因此不会丢失任何内容。