Signatur
Beschreibung
pg_select() ermöglicht es, Datensätze aus einer PostgreSQL-Tabelle zu selektieren, ohne manuell SQL-Abfragen formulieren zu müssen. Die Bedingungen werden als assoziatives Array übergeben, wobei die Schlüssel den Spaltennamen und die Werte den Filterwerten entsprechen. Die Funktion generiert daraus intern eine SELECT ... WHERE ...-Anweisung.
Die Funktion eignet sich besonders für einfache Abfragen, bei denen alle Bedingungen mit AND verknüpft werden sollen. Für komplexere Abfragen mit OR, Joins oder Aggregatfunktionen sollte stattdessen pg_query() oder pg_query_params() eingesetzt werden.
Über den Parameter $flags lässt sich das Verhalten steuern: Mit PGSQL_DML_NO_CONV werden Typkonvertierungen übersprungen, mit PGSQL_DML_EXEC wird die Abfrage direkt ausgeführt, und mit PGSQL_DML_STRING wird die erzeugte SQL-Zeichenkette zurückgegeben, ohne sie auszuführen — nützlich zur Fehlersuche.
Der Parameter $mode legt fest, in welchem Format die Ergebniszeilen zurückgegeben werden: PGSQL_ASSOC liefert assoziative Arrays, PGSQL_NUM numerisch indizierte und PGSQL_BOTH beide Varianten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | PgSql\Connection | Eine aktive PostgreSQL-Datenbankverbindung, die z. B. von pg_connect() zurückgegeben wurde. |
|
| $table_name Pflicht | string | Der Name der Tabelle, aus der Datensätze ausgewählt werden sollen. | |
| $conditions Pflicht | array | Assoziatives Array mit Spaltennamen als Schlüsseln und den zugehörigen Filterwerten. Alle Bedingungen werden mit AND verknüpft. Ein leeres Array selektiert alle Datensätze. |
|
| $flags | int | PGSQL_DML_EXEC | Steuert das Verhalten der Funktion. Mögliche Werte (kombinierbar mit |): PGSQL_DML_NO_CONV, PGSQL_DML_EXEC, PGSQL_DML_ASYNC, PGSQL_DML_STRING. Mit PGSQL_DML_STRING wird nur die SQL-Zeichenkette zurückgegeben. |
| $mode | int | PGSQL_ASSOC | Legt das Format der Ergebniszeilen fest: PGSQL_ASSOC (assoziativ), PGSQL_NUM (numerisch) oder PGSQL_BOTH (beides). |
Rückgabewert
Gibt bei erfolgreicher Ausführung ein Array von Ergebniszeilen zurück. Wurde PGSQL_DML_STRING als Flag übergeben, wird stattdessen die generierte SQL-Zeichenkette zurückgegeben. Im Fehlerfall wird false zurückgegeben.
Beispiele
Benutzer nach Status filtern
<?php
$conn = pg_connect('host=localhost dbname=myapp user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// Alle aktiven Benutzer aus der Tabelle 'users' abrufen
$conditions = [
'status' => 'active',
'role' => 'editor',
];
$rows = pg_select($conn, 'users', $conditions);
if ($rows === false) {
echo 'Abfrage fehlgeschlagen.';
} else {
foreach ($rows as $row) {
echo $row['username'] . ' — ' . $row['email'] . PHP_EOL;
}
}
pg_close($conn);
Generierte SQL-Zeichenkette ausgeben (ohne Ausführung)
<?php
$conn = pg_connect('host=localhost dbname=myapp user=postgres password=secret');
$conditions = [
'status' => 'inactive',
];
// Nur die SQL-Zeichenkette zurückgeben, nicht ausführen
$sql = pg_select($conn, 'users', $conditions, PGSQL_DML_STRING);
echo $sql;
pg_close($conn);
// Wichtig · Fallstricke
Sicherheitshinweis: pg_select() maskiert die übergebenen Werte intern mithilfe von pg_escape_string(). Dennoch sollte der Tabellenname niemals aus Benutzereingaben übernommen werden, da dieser nicht parametrisiert wird und zu SQL-Injection führen kann.
Einschränkungen: Die Funktion unterstützt nur einfache Gleichheitsbedingungen (=), die mit AND verknüpft werden. Komplexere Abfragen (z. B. mit LIKE, IN, >, <) erfordern den Einsatz von pg_query_params().
Deprecation: Ab PHP 8.0 wird die Übergabe einer nicht objektartigen Verbindung als erstes Argument nicht mehr unterstützt. Verwende stets eine PgSql\Connection-Instanz.