Maison  >  Article  >  base de données  >  Les instructions préparées peuvent-elles gérer les identifiants et les mots-clés de base de données ?

Les instructions préparées peuvent-elles gérer les identifiants et les mots-clés de base de données ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-18 18:46:02593parcourir

Can Prepared Statements Handle Database Identifiers and Keywords?

Déclarations préparées : peuvent-elles gérer des identifiants et des mots-clés ?

Les requêtes dynamiques utilisent des variables pour spécifier des tables, des champs et des valeurs de recherche. Bien que la concaténation de variables dans la requête se soit avérée efficace, l'utilisation de bindParam() ou bindValue() de PDO pour lier les variables donne lieu à des tableaux vides.

Pourquoi cela ne fonctionne pas :

Les instructions préparées par PDO autorisent uniquement des espaces réservés pour les littéraux de données. Tenter de représenter des identifiants (noms de table ou de champ) ou des mots-clés à l'aide d'espaces réservés ne fonctionnera pas.

La solution :

  • Identifiants : Pour inclure des variables représentant des identifiants, suivez ces règles :

    • Placez les identifiants dans backticks (`).
    • Évitez les backticks dans la variable en les doublant (``).
  • Mots clés :

    • Vérifiez les mots-clés fournis par l'utilisateur par rapport à une liste blanche.
    • À utiliser uniquement mots-clés en liste blanche dans la requête.

Exemple de code :

// Safely format identifier
$field = "`" . str_replace("`", "``", $field) . "`";
$sql = "SELECT * FROM t ORDER BY $field";

// Whitelist keyword
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
$sql = "SELECT * FROM t ORDER BY field $dir";

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