Instruction préparée PDO : définition des paramètres ORDER BY
Lorsque vous travaillez avec des instructions PDO préparées, vous pouvez rencontrer des difficultés lorsque vous essayez d'utiliser des paramètres dans le Clause ORDER BY. Bien que l'instruction s'exécute sans erreur, elle peut ne renvoyer aucun résultat.
Pour résoudre ce problème, il est nécessaire d'insérer les arguments ORDER BY directement dans l'instruction SQL, comme démontré dans le code suivant :
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Il est crucial de s'assurer que chaque opérateur et identifiant est codé en dur et non généré dynamiquement. Cette approche permet d'éviter les attaques par injection.
Une autre façon d'améliorer la sécurité de votre code consiste à utiliser une fonction d'assistance de liste blanche, comme celle présentée ci-dessous :
function white_list($value, $allowed_values, $error_message) { if (!in_array($value, $allowed_values)) { throw new Exception($error_message); } else { return $value; } }
En employant cette fonction, vous pouvez vérifier que la valeur saisie existe dans une liste prédéfinie de valeurs valides et générer une erreur si ce n'est pas le cas.
En utilisant cette approche, votre instruction préparée sera à la fois sécurisé et capable de gérer correctement les paramètres ORDER BY :
$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]);
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!