Ersetzen von mysql_*-Funktionen durch PDO und vorbereitete Anweisungen
Frage:
Bei der Verwendung von mysql_ * Funktionen, ist es immer noch notwendig, mysql_real_escape_string zum Escapen von Daten zu verwenden, bevor Abfragen durchgeführt werden? Wenn ja, wie funktioniert es mit PDO und vorbereiteten Anweisungen?
Antwort:
Escape mit mysql_real_escape_string
mysql_real_escape_string-Escapes Sonderzeichen in Benutzereingaben, um SQL-Injection-Angriffe zu verhindern. Es ist jedoch auf das Escapezeichen von Zeichenfolgen beschränkt und kann keine anderen Datentypen verarbeiten. Es erfordert außerdem eine aktive MySQL-Verbindung, die bei Verwendung von PDO nicht erforderlich ist.
PDO und Prepared Statements
PDO (PHP Data Objects) bietet eine konsistente Schnittstelle zu verschiedenen Datenbanktreiber, einschließlich MySQL. Vorbereitete Anweisungen sind ein wesentliches Merkmal von PDO, mit dem Sie Datenbankabfragen sicher ausführen können, indem Sie dynamische Platzhalter durch vordefinierte Werte ersetzen.
Bei der Verwendung vorbereiteter Anweisungen wird die SQL-Abfrage im Voraus vorbereitet und nur die dynamischen Werte werden bereitgestellt zur Ausführungszeit. Dadurch wird sichergestellt, dass die Abfrage vom Datenbankserver analysiert und validiert wird, sodass sie immun gegen SQL-Injection-Angriffe ist.
Parameter mit PDO binden
Um Parameter in PDO zu binden, Sie verwenden die Methode bindParam(). Der erste Parameter ist der Platzhaltername, der entweder ein benannter Platzhalter (z. B. :Benutzername) oder ein Fragezeichen-Platzhalter (?) sein kann:
``php
$stmt->bindParam(' :username', $username, PDO::PARAM_STR);
``
Für Zeichenfolgen können Sie die Länge des Platzhalters mithilfe des Typs PDO::PARAM_STR_CHAR(length) angeben. Dies ist nützlich, wenn Sie Daten in Felder mit bestimmten Größenbeschränkungen einfügen:
``php
$stmt->bindParam(':username', $username, PDO::PARAM_STR_CHAR(25));
``
Sichere Datenverarbeitung
Durch die Verwendung von PDO und vorbereiteten Anweisungen müssen Sie Benutzereingaben nicht manuell umgehen. Die Platzhalterwerte werden sicher an die Abfrage gebunden und vom Datenbankserver ausgeführt. Dies bietet einen robusteren und umfassenderen Sicherheitsmechanismus als die alleinige Verwendung von mysql_real_escape_string.
Beispiel-Einfügungsabfrage mit PDO
``php
$stmt = $dbh-> ;prepare('INSERT INTO users (username, email) VALUES (:username, :email)');
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->execute();
``
Das obige ist der detaillierte Inhalt vonIst bei der Verwendung von PDO und Prepared Statements weiterhin ein Daten-Escapen notwendig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!