Start · Sprachen · PHP · Referenz · pg_select

pg_select

Funktion

Wählt Datensätze aus einer PostgreSQL-Tabelle anhand eines assoziativen Bedingungsarrays aus.

seit PHP 4.3.0 Kategorie: db

Signatur

pg_select(PgSql\Connection $connection, string $table_name, array $conditions, int $flags = PGSQL_DML_EXEC, int $mode = PGSQL_ASSOC): array|string|false

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

Typ
array|string|false
Beschreibung

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);
max.mustermann — max@example.com erika.muster — erika@example.com

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);
SELECT * FROM "users" WHERE "status" = 'inactive'

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