我在PDO语句中的ORDER BY子句中绑定参数时遇到问题。似乎没有将“orderBy”传递给查询,因为结果不是按照它们的预期排序的。当我在查询中使用诸如price
的列名而不是参数时,结果按该列排序。代码是:
class Products {
const ORDER_BY_NAME='name';
const ORDER_BY_PRICE_PER_UNIT='price_per_unit';
const ORDER_BY_PRICE='price';
const ORDER_BY_MINIMUM_QUANTITY='minimum_quantity';
// function returns array of all products
public function getAllProducts($orderBy) {
$db=Registry::getVariable('db');
$pdoStatement=$db->prepare("SELECT name, minimum_quantity, price_per_unit, price, id FROM products ORDER BY :orderBy;");
$pdoStatement->bindParam(':orderBy', $orderBy, PDO::PARAM_STR);
$pdoStatement->execute();
return $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
}
}
稍后我打电话给:
$products=new Products();
echo $products->getAllProducts(Products::ORDER_BY_PRICE);
为什么:orderBy参数似乎不在查询中使用?
答案 0 :(得分:5)
参数绑定旨在与值一起使用。 ORDER BY后面跟着一个字段名,而不是字符串。