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.
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 :
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]);
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!