Maison > base de données > tutoriel mysql > le corps du texte

Puis-je lier des identifiants et des mots-clés dans les instructions préparées PHP PDO ?

Mary-Kate Olsen
Libérer: 2024-11-24 11:34:10
original
964 Les gens l'ont consulté

Can I Bind Identifiers and Keywords in PHP PDO Prepared Statements?

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 :

  • Formater correctement les identifiants : Placez les identifiants entre des guillemets (') et échappez aux guillemets à l'intérieur en les doublant (```).
  • Utiliser la liste blanche : Validez les identifiants dynamiques par rapport à une liste codée en dur de valeurs autorisées pour empêcher les injections potentielles.
  • Appliquer les mêmes règles aux mots-clés de syntaxe : Mettez en liste blanche et validez tous les mots-clés de syntaxe utilisés en dynamique requêtes.

Exemple de code :

Pour formater et valider un identifiant :

$field = "`" . str_replace("`", "``", $field) . "`";
Copier après la connexion

Pour mettre en liste blanche et valider un mot-clé :

$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 
Copier après la connexion

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 . '%');
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal