Beim Versuch, PHP-Variablen als Teil einer SQL-Anweisung zum Einfügen von Werten in eine MySQL-Tabelle zu verwenden, können Probleme auftreten. Um eine korrekte Ausführung zu gewährleisten, befolgen Sie unbedingt diese Regeln:
Vorbereitete Anweisungen sind für das Hinzufügen von PHP-Variablen, die SQL-Datenliterale (Zeichenfolgen oder Zahlen) darstellen, unerlässlich. Sie müssen Variablen in der SQL-Anweisung durch Platzhalter ersetzen und dann die Abfrage vorbereiten, binden und ausführen.
Das Folgende ist ein Beispiel für die Verwendung von MySQL:
<code><br></br>$type = 'testing';<br></br>$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";<br></br>$stmt = $mysqli->prepare($sql);<br></br>$stmt->bind_param("ss", $reporter, $description);<br></br>$stmt->execute();<br></br></code>
Für PDO können die Bindungs- und Ausführungsteile kombiniert werden:
<code><br></br>$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";<br></br>$stmt = $pdo->prepare($sql);<br></br>$stmt->execute([$reporter, $description]);<br></br></code>
Wenn eine PHP-Variable einen Teil einer Abfrage (über ein Datenliteral hinaus) darstellt, beispielsweise ein Schlüsselwort oder einen Bezeichner, muss sie anhand einer vordefinierten „Whitelist“ zulässiger Werte überprüft werden. Dadurch wird sichergestellt, dass nur gültige Werte im Abfragestring enthalten sind.
Das Folgende ist ein Beispiel für die Whitelist-Filterung für Sortierfeldnamen:
<code><br></br>$orderby = $_GET['orderby'] ?: "name"; // 设置默认值<br></br>$allowed = ["name", "price", "qty"]; // 允许的字段名称白名单<br></br>$key = array_search($orderby, $allowed, true);<br></br>if ($key === false) {throw new InvalidArgumentException("无效的字段名称");<p>}<br></br></p></code>
Nach der Whitelist-Filterung kann die Variable $orderby sicher in SQL-Abfragen einbezogen werden.
Das obige ist der detaillierte Inhalt vonWie fügt ich PHP -Variablen sicher in MySQL -Abfragen ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!