pg_query_params
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
pg_query_params —
Sendet ein Kommando zum Server und wartet seine Ausführung ab. Getrennt vom
SQL-Kommando können dabei Parameter übergeben werden
Beschreibung
pg_query_params() ist ähnlich wie
pg_query(), bietet aber zusätzlich die Möglichkeit,
Parameterwerte ausserhalb des SQL-Kommandos separat zu übergeben.
pg_query_params() wird nur für Verbindungen zu
PostgreSQL ab der Version 7.4 unterstützt und schlägt bei allen niedrigeren
Versionen fehl.
Falls irgendwelche Parameter übergeben wurden, werden diese in
query
als $1, $2 usw. referenziert. Der gleiche
Parameter darf mehrmals in query
auftauchen; in
diesem Fall wird der selbe Wert verwendet. Im Array
params
werden die aktuellen Parameterwerte
übergeben. Der Wert null
in diesem Array repräsentiert den SQL-Wert
NULL
.
Der Hauptvorteil von pg_query_params() gegenüber
pg_query() liegt darin, dass Parameterwerte vom
SQL-Kommando getrennt übergeben werden können und damit das fehlerträchtige
und lästige Maskieren und Setzen von Anführungszeichen vermieden werden
kann. Im Unterschied zu pg_query() ist bei
pg_query_params() nur ein einziges SQL-Kommando erlaubt.
(Es können auch Semikolons enthalten sein, aber nicht mehr als ein
nichtleeres Kommando.)
Parameter-Liste
connection
-
Eine PgSql\Connection-Instanz.
Falls connection
nicht angegeben wurde, wird die Standardverbindung benutzt.
Das ist die zuletzt mit pg_connect() oder pg_pconnect() aufgebaute Verbindung.
WarnungSeit PHP 8.1.0 ist die Verwendung der Standardverbindung veraltet.
query
-
Die parametrisierte Abfrage. Diese darf nur ein einziges SQL-Kommando
enthalten (mehrere Kommandos, durch Semikolon getrennt, sind nicht
zulässig). Falls Parameter übergeben werden, werden sie als $1, $2, ...
referenziert.
Anwenderdaten sollten immer als Parameter übergeben werden, und nicht
in die Abfragezeichenkette interpoliert werden, wo sie mögliche SQL-Injection-Angriffsvektoren
bilden und Bugs einführen, wenn die zu behandelnden Daten
Anführungszeichen enthalten. Wenn aus irgendeinem Grund Parameter nicht
verwendet werden können, ist sicherzustellen, dass Werte ordnungsgemäß maskiert sind.
params
-
Ein Array mit Parameterwerten, mit denen die Platzhalter $1, $2 usw. in
der ursprünglichen vorbereiteten Abfrage ersetzt werden. Die Anzahl der
Elemente dieses Arrays muss mit der Anzahl der Platzhalter
übereinstimmen.
Werte, die für bytea
Felder vorgesehen sind, werden
nicht als Parameter unterstützt. Statt dessen sind
pg_escape_bytea() oder die Funktionen für große
Objekte zu verwenden.
Rückgabewerte
Bei Erfolg wird eine PgSql\Result-Instanz zurückgegeben.
Bei einem Fehler wird false
zurückgegeben.
Beispiele
Beispiel #1 pg_query_params()-Beispiel
<?php
// Verbindung zu einer Datenbank namens "mary" aufbauen
$dbconn = pg_connect("dbname=mary");
// Alle Shops mit dem Namen Joe's Widgets finden. Beachten Sie, dass es
// nicht nötig ist, den String "Joe's Widgets" zu maskieren.
$result = pg_query_params($dbconn, 'SELECT * FROM shops WHERE name = $1', array("Joe's Widgets"));
// Vergleich mit pg_query
$str = pg_escape_string("Joe's Widgets");
$result = pg_query($dbconn, "SELECT * FROM shops WHERE name = '{$str}'");
?>