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 ?
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!