Identifiants de liaison et mots-clés de syntaxe dans les instructions préparées PHP PDO
Les requêtes dynamiques permettent des opérations de base de données flexibles en utilisant des variables pour définir les noms de table, les colonnes noms et valeurs de recherche. Cependant, les identifiants de liaison (noms de table ou de champ) ou les mots-clés de syntaxe utilisant des instructions préparées par PDO peuvent conduire à des résultats inattendus.
Problème :
Lors de l'utilisation de bindParam() ou bindValue () pour lier des variables représentant des identifiants ou des mots-clés de syntaxe, un tableau vide est renvoyé à la place de la base de données attendue résultats.
Explication :
Les instructions préparées par PDO ne peuvent lier que des littéraux de données. Par conséquent, tenter de lier des identifiants ou des mots-clés n’aboutira pas au résultat souhaité.
Solution :
Pour créer des requêtes dynamiques sécurisées et fiables, il est crucial de :
Exemple de code :
Pour formater et valider un identifiant :
$field = "`" . str_replace("`", "``", $field) . "`";
Pour mettre en liste blanche et valider un mot-clé :
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
Ensuite, incluez les variables aseptisées dans le fichier préparé déclaration :
$stmt = $db->prepare(' SELECT * FROM ? WHERE ? LIKE ? '); $stmt->bindParam(1, $searchTable); $stmt->bindParam(2, $searchBy); $stmt->bindValue(3, '%' . $searchTerm . '%');
En adhérant à ces règles, vous pouvez garantir la validité et la sécurité de vos requêtes de base de données dynamiques.
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!