Maison >développement back-end >tutoriel php >Pourquoi ne puis-je pas utiliser les paramètres PDO dans la clause ORDER BY de mon instruction SQL ?
ORDER BY Params dans les instructions PDO
Vous rencontrez des difficultés à utiliser les paramètres dans la clause ORDER BY de votre instruction SQL. Les paramètres :order et :direction ne produisent aucun résultat.
Cause du problème
Les paramètres PDO ne peuvent pas être utilisés directement dans la clause ORDER BY. Il doit s'agir de chaînes statiques.
Solution
Il n'y a pas de constantes PDO pour les noms de colonnes ou les instructions de tri. Par conséquent, vous devez insérer ces valeurs directement dans l'instruction SQL. Cependant, il est crucial de prendre des précautions :
$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";
$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]);
Explication
La fonction de liste blanche vérifie la valeur et génère une erreur si elle est incorrecte, atténuant ainsi le risque de SQL attaques par injection.
Exemple
$sql = "SELECT field from table WHERE column = :my_param"; $stmt = $db->prepare($sql); $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();
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!