Beim Einfügen von Werten in eine Tabelle mithilfe einer PHP-Variablen in Ihrer VALUES-Anweisung tritt ein Problem auf . Es ist von entscheidender Bedeutung, den richtigen Ansatz für die Integration von PHP-Variablen in MySQL-Anweisungen zu verstehen.
Das Einfügen von Datenliteralen (SQL-Zeichenfolgen oder -Zahlen) in MySQL-Anweisungen erfordert die Verwendung vorbereiteter Aussagen. Es beinhaltet:
In PHP 8.2 können diese Schritte in einem einzigen Aufruf zusammengefasst werden:
$type = 'testing'; $reporter = "John O'Hara"; $sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)"; $mysqli->execute_query($sql, [$reporter, $description]);
Für ältere PHP-Versionen:
$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>Hinzufügen von Datenliteralen mit PDO
PDO bietet a Optimierter Ansatz:
$type = 'testing'; $reporter = "John O'Hara"; $sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)"; $stmt = $pdo->prepare($sql); $stmt->execute([$reporter, $description]);
Variablen, die andere Abfrageteile als Literale darstellen (Schlüsselwörter, Bezeichner), sollten über eine Whitelist gefiltert werden . Dies verhindert das Einfügen unbeabsichtigter Werte.
Um beispielsweise einen Feldnamen basierend auf Benutzereingaben zu filtern:
$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"); }
Das obige ist der detaillierte Inhalt vonWie kann ich PHP-Variablen sicher in MySQL-Anweisungen einbinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!