Maison >base de données >tutoriel mysql >Comment puis-je utiliser en toute sécurité ORDER BY dans les instructions PDO préparées ?
Définition des paramètres ORDER BY dans les instructions PDO préparées
Lors de la tentative d'utilisation des paramètres dans la section ORDER BY d'une requête SQL à l'aide d'un PDO préparé , il est important de savoir que PDO ne prend pas en charge la liaison directe des noms de colonnes ni les instructions de classement en tant que paramètres. Cela peut prêter à confusion lorsque l'ordre de tri souhaité n'est pas appliqué.
Pour résoudre ce problème, vous devez insérer la clause ORDER BY directement dans la requête SQL, comme illustré dans l'exemple suivant :
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Considérations d'évasion
Il est crucial de s'assurer que chaque opérateur et identifiant de la clause ORDER BY est codé en dur dans votre script pour éviter les failles de sécurité. N'interpolez jamais les entrées fournies par l'utilisateur directement dans la clause ORDER BY.
Fonction d'assistance de liste blanche
Pour simplifier le processus de validation et de liste blanche, vous pouvez créer une fonction d'assistance :
function white_list($value, $allowed, $error) { if (in_array($value, $allowed)) { return $value; } else { throw new Exception($error); } }
Cette fonction vérifie la valeur par rapport à une liste d'options autorisées et génère une erreur si la valeur est invalide.
Utilisation
Avec la fonction d'assistance de liste blanche, vous pouvez créer une instruction préparée sécurisée pour la clause 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]);
Par en suivant ces directives, vous pouvez définir correctement les paramètres ORDER BY dans les instructions PDO préparées tout en préservant la sécurité.
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!