Maison > base de données > tutoriel mysql > Comment intégrer en toute sécurité des variables PHP dans des instructions MySQL ?

Comment intégrer en toute sécurité des variables PHP dans des instructions MySQL ?

Mary-Kate Olsen
Libérer: 2025-01-25 16:56:10
original
372 Les gens l'ont consulté

How to Safely Embed PHP Variables in MySQL Statements?

Variables PHP intégrées dans l'instruction MySQL

Améliorer l'instruction SQL avec les variables PHP peut générer dynamiquement une requête. Ce qui suit est le problème que vous avez rencontré:

Afin de résoudre cette erreur, veuillez suivre le guide suivant:
<code class="language-php">$type = 'testing';
mysql_query("INSERT INTO contents (type, reporter, description) 
     VALUES($type, 'john', 'whatever')");</code>
Copier après la connexion

<.> 1. Utilisez la déclaration de pré-procédés

Toutes les variables qui indiquent le texte SQL (chaîne, nombres) dans l'instruction sont obligatoires. Ce qui suit est le flux de travail:

Utiliser le lieu occupe:

Les variables sont remplacées dans la requête SQL au symbole de placement.

    Prêt à interroger:
  • Utilisez la méthode sur l'objet de connexion de la base de données.
  • Variables de liaison:
  • Utilisez pour s'associer à la valeur variable. prepare() Exécuter:
  • Utiliser
  • Effectuer une requête pré-procédé. bind_param() dans Mysqli (PHP 8.2):
  • dans mysqli (l'ancienne version PHP): execute()

en APD:

<code class="language-php">$type = 'testing';
$reporter = "John O'Hara";
$description = 'whatever'; //添加了description变量
$sql = "INSERT INTO contents (type,reporter,description) VALUES (?,?,?)"; //修改了占位符数量
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("sss", $type, $reporter, $description); //修改了参数类型和数量
$stmt->execute();</code>
Copier après la connexion
Copier après la connexion
<.> 2. Implémentez un filtrage de liste blanche

Pour les pièces de requête telles que les mots clés, les identifiants ou les opérateurs, veuillez utiliser la méthode de la liste blanche. Filtrez ces variables via la liste de valeur autorisée prédéfinie:

<code class="language-php">$type = 'testing';
$reporter = "John O'Hara";
$description = 'whatever'; //添加了description变量
$sql = "INSERT INTO contents (type,reporter,description) VALUES (?,?,?)"; //修改了占位符数量
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("sss", $type, $reporter, $description); //修改了参数类型和数量
$stmt->execute();</code>
Copier après la connexion
Copier après la connexion

Assurez-vous de formater correctement l'identifiant conformément à la syntaxe de la base de données (par exemple, le nombre anti-attraction de MySQL). Ensuite, cette variable est incluse en toute sécurité dans la chaîne SQL:

Filtrez l'instruction de pré-procédé et une liste blanche, vous pouvez effectivement empêcher SQL d'injecter des attaques et intégrer en toute sécurité les variables PHP dans votre requête MySQL. Veuillez noter que la fonction
<code class="language-php">$type = 'testing';
$reporter = "John O'Hara";
$description = 'whatever'; //添加了description变量
$sql = "INSERT INTO contents (type,reporter,description) VALUES (?,?,?)"; //修改了占位符数量
$stmt = $pdo->prepare($sql);
$stmt->execute([$type, $reporter, $description]); //修改了参数数量</code>
Copier après la connexion
a été abandonnée. Le code par exemple a été mis à jour pour refléter cela et réparer les erreurs dans l'exemple d'origine.

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