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 :
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]);
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();
AOP :
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $stmt = $pdo->prepare($sql); $stmt->execute([$reporter, $description]);
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"); }
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"); }
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";
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!