Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment définir les paramètres ORDER BY à l'aide d'une instruction PDO préparée ?

Oui, vous êtes coincé en l'insérant directement dans le SQL. Avec quelques précautions, bien sûr. Chaque opérateur/identifiant doit être codé en dur dans votre script, comme ceci :

$orders=array("name","price","qty");
$key=array_search($_GET['sort'],$orders);
$order=$orders[$key];
$query="SELECT * from table WHERE is_live = :is_live ORDER BY $order";

Idem pour la direction.

J'ai écrit une fonction d'aide à la liste blanche à utiliser dans de tels cas, cela réduit considérablement la quantité de code à écrire :

$order = white_list($order, ["name","price","qty"], "Invalid field name");
$direction = white_list($direction, ["ASC","DESC"], "Invalid ORDER BY direction");

$sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction";
$stmt = $db->prepare($sql);
$stmt->execute([$is_live]);

L'idée ici est de vérifier la valeur et de générer une erreur au cas où elle ne serait pas correcte.