2010-05-25 10 views
1

J'ai un problème avec la liaison d'un paramètre dans une clause ORDER BY dans une instruction PDO. "orderBy" ne semble pas être passé à la requête car les résultats ne sont pas commandés comme ils sont supposés l'être. Lorsque j'utilise un nom de colonne tel que price dans la requête plutôt qu'un paramètre, les résultats sont triés par cette colonne. Le code est:Pourquoi le paramètre de liaison dans la clause ORDER BY ne commande-t-il pas les résultats?

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); 
    } 
} 

Plus tard j'appelle:

$products=new Products(); 

echo $products->getAllProducts(Products::ORDER_BY_PRICE); 

Pourquoi pas: paramètre orderBy semblent être utilisés dans la requête?

+0

Wow, 1 espace en retrait .. – ryeguy

Répondre

5

La liaison de paramètres est destinée à être utilisée avec des valeurs. ORDER BY est en fait suivi d'un nom de champ, pas d'une chaîne.

+0

Voir http://stackoverflow.com/questions/2542410/how-do-i-set-order-by-params-using-prepared-pdo-statement – nuqqsa

+0

A droite, le problème voici que pdo insère le nom de la colonne avec des guillemets autour de lui. – ryeguy