PHP Conference Japan 2024

PDO::quote

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.1)

PDO::quote Setzt eine Zeichenkette für die Verwendung in einer Abfrage in Anführungszeichen

Beschreibung

public PDO::quote(string $string, int $type = PDO::PARAM_STR): string|false

PDO::quote() schließt die angegebene Zeichenkette (falls erforderlich) in Anführungszeichen ein und maskiert Sonderzeichen innerhalb der Zeichenkette, wobei ein für den zugrundeliegenden Treiber geeigneter Stil der Anführungszeichen verwendet wird.

Wenn SQL-Anweisungen mit dieser Funktion erstellt werden, wird dringend empfohlen, PDO::prepare() zu verwenden, um SQL-Anweisungen mit gebundenen Parametern vorzubereiten, anstatt PDO::quote() zu verwenden, um Benutzereingaben in eine SQL-Anweisung einzufügen. Vorbereitete Anweisungen mit gebundenen Parametern sind nicht nur portabler, bequemer und immun gegen SQL-Injections, sondern lassen sich oft auch viel schneller ausführen als interpolierte Abfragen, da sowohl der Server als auch der Client die Abfragen in einer bereits kompilierten Form zwischenspeichern können.

Diese Methode ist nicht bei allen PDO-Treibern implementiert (insbesondere nicht bei PDO_ODBC). In diesem Fall sollten stattdessen vorbereitete Anweisungen verwendet werden.

Achtung

Sicherheit: Der voreingestellte Zeichensatz

Der Zeichensatz muss je nach Treiber entweder auf Serverebene oder in der Datenbankverbindung selbst eingestellt werden, damit er sich auf PDO::quote() auswirkt. Weitere Informationen sind in der Treiberspezifischen Dokumentation zu finden.

Parameter-Liste

string

Die Zeichenkette, die in Anführungszeichen gesetzt werden soll

type

Gibt Treibern, die andere Anführungszeichen verwenden, einen Hinweis auf den Datentyp. Zum Beispiel teilt PDO_PARAM_LOB dem Treiber mit, dass er binäre Daten maskieren soll.

Rückgabewerte

Gibt eine Zeichenkette in Anführungszeichen zurück, die theoretisch bedenkenlos an eine SQL-Anweisung übergeben werden kann, oder false, wenn der Treiber diese Anführungszeichen nicht unterstützt.

Beispiele

Beispiel #1 Schützen einer normalen Zeichenkette

<?php
$conn
= new PDO('sqlite:/home/lynn/music.sql3');

/* Einfache Zeichenkette */
$string = 'Nice';
print
"Nicht abgeschirmte Zeichenkette: $string\n";
print
"Abgeschirmte Zeichenkette: " . $conn->quote($string) . "\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Nicht abgeschirmte Zeichenkette: Nice
Abgeschirmte Zeichenkette: 'Nice'

Beispiel #2 Schützen einer gefährlichen Zeichenkette

<?php
$conn
= new PDO('sqlite:/home/lynn/music.sql3');

/* Gefährliche Zeichenkette */
$string = 'Naughty \' string';
print
"Nicht abgeschirmte Zeichenkette: $string\n";
print
"Abgeschirmte Zeichenkette: " . $conn->quote($string) . "\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Nicht abgeschirmte Zeichenkette: Naughty ' string
Abgeschirmte Zeichenkette: 'Naughty '' string'

Beispiel #3 Schützen einer komplexen Zeichenkette

<?php
$conn
= new PDO('sqlite:/home/lynn/music.sql3');

/* Komplexe Zeichenkette */
$string = "Co'mpl''ex \"st'\"ring";
print
"Nicht abgeschirmte Zeichenkette: $string\n";
print
"Abgeschirmte Zeichenkette: " . $conn->quote($string) . "\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Nicht abgeschirmte Zeichenkette: Co'mpl''ex "st'"ring
Abgeschirmte Zeichenkette: 'Co''mpl''''ex "st''"ring'

Siehe auch

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top