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 :
Mots clés :
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!