У меня возникла проблема с привязкой параметра в предложении ORDER BY в инструкции PDO. «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?
Связывание параметров предназначено для использования со значениями. ORDER BY фактически сопровождается именем поля, а не строкой.