Maison > développement back-end > tutoriel php > Comment puis-je inclure en toute sécurité des variables PHP dans les instructions MySQL ?

Comment puis-je inclure en toute sécurité des variables PHP dans les instructions MySQL ?

Barbara Streisand
Libérer: 2024-12-25 08:10:29
original
266 Les gens l'ont consulté

How Can I Safely Include PHP Variables in MySQL Statements?

Inclure des variables PHP dans les instructions MySQL

Vous rencontrez un problème lors de l'insertion de valeurs dans une table à l'aide d'une variable PHP dans votre instruction VALUES . Comprendre l'approche appropriée pour intégrer les variables PHP dans les instructions MySQL est crucial.

Utiliser les instructions préparées

L'insertion de littéraux de données (chaînes ou nombres SQL) dans les instructions MySQL nécessite l'utilisation de déclarations préparées. Cela implique :

  1. Remplacer les variables par des espaces réservés dans votre instruction SQL
  2. Préparer la requête révisée
  3. Lier les variables aux espaces réservés
  4. Exécuter la requête

Ajout de littéraux de données avec Mysqli

Dans PHP 8.2, ces étapes peuvent être combinées en un seul appel :

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$mysqli->execute_query($sql, [$reporter, $description]);
Copier après la connexion

Pour les anciennes versions de PHP :

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();
Copier après la connexion

< h3>Ajout de littéraux de données avec PDO

PDO propose une approche simplifiée :

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);
Copier après la connexion

Filtrer les variables pour d'autres parties de requête

Variables représentant les parties de requête autres que les littéraux (mots-clés, identifiants) doivent être filtrés via une liste blanche. Cela empêche l'insertion de valeurs involontaires.

Par exemple, pour filtrer un nom de champ en fonction de la saisie de l'utilisateur :

$orderby = $_GET['orderby'] ?: "name"; // set the default value
$allowed = ["name", "price", "qty"]; // the white list of allowed field names
$key = array_search($orderby, $allowed, true); // see if we have such a name
if ($key === false) { 
    throw new InvalidArgumentException("Invalid field name"); 
}
Copier après la connexion

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