Maison >développement back-end >tutoriel php >Pourquoi ne puis-je pas utiliser les paramètres de la clause ORDER BY de mon instruction PDO préparée ?

Pourquoi ne puis-je pas utiliser les paramètres de la clause ORDER BY de mon instruction PDO préparée ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-17 16:54:15595parcourir

Why Can't I Use Parameters in the ORDER BY Clause of My Prepared PDO Statement?

Utilisation des paramètres dans la clause ORDER BY avec l'instruction PDO préparée

Dans votre instruction SQL, vous rencontrez des difficultés lors de l'emploi de paramètres dans l'ORDER BY clause. Malgré la liaison des paramètres aux espaces réservés :order et :direction, l'instruction s'exécute sans sortie.

Contrairement à l'espace réservé :my_param, qui fonctionne correctement, les espaces réservés :order et :direction nécessitent une insertion directe dans le SQL. Vous pouvez le faire comme suit :

$order = 'columnName';
$direction = 'ASC';

$stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");

Il n'y a pas de constante PDO::PARAM_COLUMN_NAME ou de substitut similaire. La mise en garde est que tous les opérateurs et identifiants de la clause ORDER BY doivent être codés en dur. Par exemple :

$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";

La liste blanche, illustrée ci-dessous, est une approche alternative qui protège contre les entrées non valides :

$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]);

Cela garantit que les valeurs incorrectes sont signalées et traitées correctement, améliorant ainsi la sécurité. de votre candidature.

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!

Déclaration:
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