Maison > base de données > tutoriel mysql > Comment puis-je utiliser en toute sécurité les paramètres ORDER BY avec les instructions préparées par PDO ?

Comment puis-je utiliser en toute sécurité les paramètres ORDER BY avec les instructions préparées par PDO ?

DDD
Libérer: 2024-12-26 01:12:10
original
792 Les gens l'ont consulté

How Can I Securely Use ORDER BY Parameters with PDO Prepared Statements?

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");
Copier après la connexion

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;
    }
}
Copier après la connexion

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]);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal