Einbinden von PHP-Variablen in MySQL-Anweisungen
In diesem Szenario treten insbesondere beim Einfügen von Werten in die Tabelle „Inhalte“ Probleme auf bei Verwendung der PHP-Variablen „$type“ im Abschnitt „VALUES“ der MySQL-Anweisung. Schauen wir uns den passenden Ansatz genauer an.
1. Verwenden Sie vorbereitete Aussagen (empfohlen)
Diese Methode beantwortet 99 % der Anfragen, einschließlich Ihrer. Jede Variable, die ein SQL-Datenliteral (Zeichenfolge oder Zahl) darstellt, muss ausnahmslos durch vorbereitete Anweisungen eingebunden werden. Statische Werte können jedoch unverändert eingefügt werden.
Der Vorbereitungsprozess umfasst vier Schritte:
So funktioniert es in verschiedenen Datenbanktreibern:
mysqli mit PHP 8.2:
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $mysqli->execute_query($sql, [$reporter, $description]);
mysqli mit früherem PHP Versionen:
$stmt = $mysqli->prepare("INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"); $stmt->bind_param("ss", $reporter, $description); $stmt->execute();
PDO:
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $stmt = $pdo->prepare($sql); $stmt->execute([$reporter, $description]);
2. Implementieren Sie Whitelist-Filterung für Abfrageteile
Wenn Sie Variablen einbeziehen müssen, die bestimmte Teile der SQL-Abfrage darstellen, wie Schlüsselwörter, Tabellen- oder Feldnamen oder Operatoren, verwenden Sie eine „Whitelist“, um deren Gültigkeit sicherzustellen.
Zum Beispiel, wenn eine Variable eine Reihenfolge nach Feld darstellt:
$allowed = ["name", "price", "qty"]; $key = array_search($orderby, $allowed, true); if ($key === false) { throw new InvalidArgumentException("Invalid field name"); }
Prüfen Sie auf ähnliche Weise, ob die Reihenfolge gültig ist Anweisungen:
$allowed = ["ASC", "DESC"]; $key = array_search($direction, $allowed, true); if ($key === false) { throw new InvalidArgumentException("Invalid ORDER BY direction"); }
Nach der Validierung bereiten Sie den Abfrage-String vor und denken Sie daran, Bezeichner entsprechend der MySQL-Syntax richtig zu maskieren:
$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";
Das obige ist der detaillierte Inhalt vonWie füge ich PHP-Variablen sicher in MySQL-INSERT-Anweisungen ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!