Requêtes ordonnées avec des instructions préparées PDO
Dans les interactions de bases de données, le classement des résultats des requêtes est une tâche courante. L'utilisation d'instructions préparées par PDO avec des paramètres permet l'insertion sécurisée des paramètres de commande. Cependant, des difficultés peuvent survenir lors de la tentative d'utilisation des paramètres dans la clause ORDER BY.
La requête suivante démontre l'utilisation des paramètres pour la clause WHERE mais ne parvient pas à appliquer l'ordre :
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT field from table WHERE column = :my_param ORDER BY :order :direction"); $stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR); $stmt->bindParam(':order', $order, PDO::PARAM_STR); $stmt->bindParam(':direction', $direction, PDO::PARAM_STR); $stmt->execute();
Le les paramètres :my_param, :order et :direction sont liés à l'aide de marqueurs de paramètres. Cependant, la clause de commande ne fonctionne pas correctement. On pourrait s'attendre à un mécanisme d'échappement pour les paramètres de la clause ORDER BY, mais cela n'existe pas.
Au lieu de cela, il est nécessaire d'insérer les paramètres de tri directement dans l'instruction SQL, avec les précautions appropriées :
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Pour garantir la sécurité, il est recommandé de mettre en liste blanche les valeurs des paramètres de commande. L'extrait de code suivant illustre un mécanisme de liste blanche utilisant un tableau :
$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";
Cette approche garantit que seules des valeurs prédéfinies et sûres peuvent être utilisées pour le tri, évitant ainsi les vulnérabilités de sécurité potentielles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!