Non c'est pas une bonne pratique. Si ça marche c'est assez étonnant d'ailleurs parce que ça ne devrait pas.
Le binding de paramètres dans une requête préparée est à réserver aux valeurs, pas au noms de colonnes ou à des options comme ASC ou DESC.
Pour ces derniers on préfère la concaténation avec validation préalable, un truc comme :
$sorting = 'ASC';
if (isset($_GET['desc']) {
$sorting = 'DESC';
}
$query = 'SELECT * FROM ... WHERE xxx = :value ORDER BY ... ' . $sorting;
Bien évidemment le set de valeurs doit être limité (ici ASC/DESC) ou vérifié (dans le cas d'un tri par colonnes pouvant être renseigné par l'utilisateur par exemple) pour éviter des injections SQL. Mais utilisé la paramétrisation pour ça c'est pas adapté car pas du tout portable (et à ma connaissance pas supporté, si tu as réussi à le faire marcher sous cette forme je veux bien savoir quelle base tu as utilisé)
Message édité le 10 décembre 2016 à 20:06:24 par WatchItBurn