Heim > Backend-Entwicklung > PHP-Tutorial > Wie füge ich PHP-Variablen sicher in MySQL-INSERT-Anweisungen ein?

Wie füge ich PHP-Variablen sicher in MySQL-INSERT-Anweisungen ein?

Barbara Streisand
Freigeben: 2024-12-21 18:03:23
Original
864 Leute haben es durchsucht

How to Safely Include PHP Variables in MySQL INSERT Statements?

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:

  • Platzhalter für Variablen in der SQL-Anweisung festlegen.
  • Bereiten Sie die vor geänderte Abfrage.
  • Variablen an entsprechende Platzhalter binden.
  • Führen Sie die aus Abfrage.

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]);
Nach dem Login kopieren

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();
Nach dem Login kopieren

PDO:

$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);
Nach dem Login kopieren

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"); }
Nach dem Login kopieren

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 dem Login kopieren

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";
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage