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
Barbara Streisandoriginal
2024-12-25 08:10:29323parcourir

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]);

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();

< 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]);

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"); 
}

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!

Déclaration:
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