Comment inclure des variables PHP dans les instructions MySQL
P粉738248522
2023-08-23 21:12:18
<p>J'essaie d'insérer des valeurs dans une table des matières. Si je n'ai pas de variables PHP dans VALUES, cela fonctionne bien. Cela ne fonctionne pas lorsque je mets la variable <code>$type</code> dans <code>VALUES</code> Qu'ai-je fait de mal? </p>
<pre class="brush:php;toolbar:false;">$type = 'test';
mysql_query("INSERT INTO content (type, rapporteur, description)
VALEURS($type, 'john', 'peu importe')");</pre>
<p><br /></p>
Pour éviter l'injection SQL, insérez des instructions avec be
Les règles pour ajouter des variables PHP à n'importe quelle instruction MySQL sont simples et directes :
1. Utilisez des déclarations préparées
Cette règle couvre 99% des requêtes, notamment la vôtre. Toutes les variables représentant des littéraux de données SQL (ou, simplement - des chaînes ou des nombres SQL) doivent être ajoutées via des instructions préparées. Aucune exception.
Cette méthode comporte quatre étapes de base
Voici comment procéder en utilisant tous les pilotes de base de données PHP populaires :
Ajoutez du texte de données en utilisant
mysqli
Les versions actuelles de PHP vous permettent de préparer/lier/exécuter en un seul appel :
Si vous disposez d'une ancienne version de PHP, la préparation/liaison/exécution doit être effectuée explicitement :
Le code est un peu complexe, mais une explication détaillée de tous ces opérateurs peut être trouvée dans mon article, Comment exécuter une requête INSERT à l'aide de Mysqli, ainsi qu'une solution qui simplifie considérablement le processus.
Pour les requêtes SELECT, vous pouvez utiliser la même méthode que ci-dessus :
Cependant, si vous disposez d'une ancienne version de PHP, vous devrez effectuer une routine préparer/lier/exécuter et ajouter la paire
get_result()
方法的调用,以获得熟悉的mysqli_result Vous pouvez en récupérer les données de la manière habituelle :Utilisez PDO pour ajouter du texte de données
En PDO, nous pouvons combiner les parties de liaison et d'exécution, ce qui est très pratique. PDO prend également en charge les espaces réservés nommés, ce que certaines personnes trouvent très pratique.
2. Utilisez le filtrage de la liste blanche
Toute autre partie de la requête, telle que les mots-clés SQL, les noms de tables ou de champs, ou les opérateurs, doit être filtrée via liste blanche.
Parfois, nous devons ajouter une variable qui représente une autre partie de la requête, comme un mot-clé ou un identifiant (nom de base de données, de table ou de champ). Cette situation est rare, mais il vaut mieux être préparé.
Dans ce cas, votre variable doit être vérifiée par rapport à la liste de valeurs explicitement écrites dans le script. Ceci est expliqué dans mon autre article Ajout de noms de champs dans la clause ORDER BY en fonction de la sélection de l'utilisateur :
Voici un exemple :
Après un code comme celui-ci,
$direction
和$orderby
les variables peuvent être insérées en toute sécurité dans la requête SQL car soit elles seront égales à l'une des variantes autorisées, soit une erreur sera générée.Une dernière chose à mentionner à propos des identifiants est qu'ils doivent également être formatés selon la syntaxe spécifique de la base de données. Pour MySQL, il doit s'agir des caractères
反引号
entourant l'identifiant. La chaîne de requête finale pour notre exemple de commande sera donc