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

Comment inclure en toute sécurité des variables PHP dans les instructions MySQL INSERT ?

Barbara Streisand
Libérer: 2024-12-21 18:03:23
original
942 Les gens l'ont consulté

How to Safely Include PHP Variables in MySQL INSERT Statements?

Inclure des variables PHP dans les instructions MySQL

Dans ce scénario, vous rencontrez des problèmes lors de l'insertion de valeurs dans la table « contenu », en particulier lors de l'utilisation de la variable PHP "$type" dans la section "VALUES" de l'instruction MySQL. Examinons l'approche appropriée.

1. Utiliser des déclarations préparées (recommandé)

Cette méthode répond à 99 % des requêtes, y compris la vôtre. Toute variable représentant un littéral de données SQL (chaîne ou nombre) doit être incorporée via des instructions préparées, sans exception. Les valeurs statiques, cependant, peuvent être insérées telles quelles.

Le processus de préparation comporte quatre étapes :

  • Désignez des espaces réservés pour les variables dans l'instruction SQL.
  • Préparez le requête modifiée.
  • Lier les variables aux espaces réservés respectifs.
  • Exécuter la requête.

Voici comment cela fonctionne dans différents pilotes de base de données :

mysqli avec PHP 8.2 :

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

mysqli avec PHP antérieur Versions :

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

AOP :

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

2. Implémenter le filtrage de liste blanche pour les parties de requête

Si vous devez inclure des variables représentant des parties spécifiques de la requête SQL, comme des mots clés, des noms de table ou de champ, ou des opérateurs, utilisez une « liste blanche » pour garantir leur validité.

Par exemple, si une variable représente un tri par champ :

$allowed = ["name", "price", "qty"];
$key = array_search($orderby, $allowed, true);
if ($key === false) { throw new InvalidArgumentException("Invalid field name"); }
Copier après la connexion

De même, vérifiez la validité du tri instructions :

$allowed = ["ASC", "DESC"];
$key = array_search($direction, $allowed, true);
if ($key === false) { throw new InvalidArgumentException("Invalid ORDER BY direction"); }
Copier après la connexion

Une fois validé, préparez la chaîne de requête, et pensez à bien échapper les identifiants selon la syntaxe MySQL :

$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";
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