# 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(PgSql\Connection `$connection` = ?, string `$query`, array `$params`): PgSql\Result|false

Sendet ein Kommando zum Server und wartet seine Ausführung ab. Getrennt vom SQL-Kommando können dabei Parameter übergeben werden.

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.

  Warnung

  Seit 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.

### Changelog

Version | Beschreibung
--- | ---
8.1.0 | Gibt nun eine PgSql\Result-Instanz zurück; vorher wurde eine Ressource zurückgegeben.
8.1.0 | Der Parameter `connection` erwartet nun eine PgSql\Connection-Instanz; vorher wurde eine Ressource erwartet.

### 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}'");
?>`

### Siehe auch

- pg_query() - Führt eine Abfrage aus

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open