Start · Sprachen · PHP · Referenz · PgSql\Connection

PgSql\Connection

Klasse

Opake Klasse, die ab PHP 8.1.0 eine PostgreSQL-Verbindungsressource kapselt und die bisherige <code>resource</code>-Darstellung ersetzt.

seit PHP 8.1.0 Kategorie: db

Signatur

class PgSql\Connection

Beschreibung

PgSql\Connection ist eine vollständig opake Klasse, die seit PHP 8.1.0 als Rückgabetyp aller PostgreSQL-Verbindungsfunktionen wie pg_connect() und pg_pconnect() verwendet wird. Sie ersetzt den zuvor genutzten resource-Typ und macht Verbindungsobjekte typsicher und modern handhabbar.

Als opake Klasse bietet sie keine öffentlichen Methoden oder Eigenschaften. Sie dient ausschließlich als Handle, das an die zahlreichen pg_*-Funktionen übergeben wird, um Datenbankoperationen wie Abfragen, Transaktionen und Verbindungsmanagement durchzuführen.

Der Wechsel von resource zu PgSql\Connection ermöglicht eine saubere Typdeklaration in Funktionsparametern und Rückgabewerten. Code, der zuvor auf is_resource() angewiesen war, sollte auf instanceof PgSql\Connection umgestellt werden.

Die Verbindung wird automatisch geschlossen, wenn das Objekt den Gültigkeitsbereich verlässt und der Garbage Collector es freigibt, oder explizit durch den Aufruf von pg_close().

Beispiele

Verbindungsaufbau und Typprüfung mit PgSql\Connection

<?php
$conn = pg_connect('host=localhost dbname=meinedb user=admin password=geheim');

if ($conn instanceof PgSql\Connection) {
    echo "Verbindung erfolgreich hergestellt." . PHP_EOL;

    $result = pg_query($conn, 'SELECT version()');
    if ($result instanceof PgSql\Result) {
        $row = pg_fetch_row($result);
        echo 'PostgreSQL-Version: ' . $row[0] . PHP_EOL;
    }

    pg_close($conn);
} else {
    echo "Verbindung fehlgeschlagen." . PHP_EOL;
}
Verbindung erfolgreich hergestellt. PostgreSQL-Version: PostgreSQL 15.3 on x86_64-pc-linux-gnu ...

Typisierte Funktion mit PgSql\Connection als Parameter und Rückgabetyp

<?php
function verbindungAufbauen(string $dsn): PgSql\Connection {
    $conn = pg_connect($dsn);
    if (!($conn instanceof PgSql\Connection)) {
        throw new RuntimeException('Datenbankverbindung konnte nicht hergestellt werden.');
    }
    return $conn;
}

function datensaetzeZaehlen(PgSql\Connection $conn, string $tabelle): int {
    $tabelle = pg_escape_identifier($conn, $tabelle);
    $result = pg_query($conn, "SELECT COUNT(*) FROM {$tabelle}");
    if ($result === false) {
        throw new RuntimeException('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
    }
    $row = pg_fetch_row($result);
    return (int) $row[0];
}

$conn = verbindungAufbauen('host=localhost dbname=meinedb user=admin password=geheim');
$anzahl = datensaetzeZaehlen($conn, 'benutzer');
echo "Anzahl Benutzer: {$anzahl}" . PHP_EOL;
pg_close($conn);
Anzahl Benutzer: 42

// Wichtig · Fallstricke

Migration von PHP < 8.1: Vor PHP 8.1 lieferten pg_connect() und ähnliche Funktionen einen resource-Typ. Code, der is_resource($conn) verwendet, muss auf $conn instanceof PgSql\Connection umgestellt werden, da is_resource() für Objekte false zurückgibt.

Opakes Objekt: Es gibt keine öffentlich zugänglichen Eigenschaften oder Methoden. Alle Operationen auf der Verbindung erfolgen über die klassischen pg_*-Funktionen, denen das Verbindungsobjekt übergeben wird.

Sicherheit: Verbindungsparameter (Passwörter, Zugangsdaten) sollten niemals hartcodiert werden. Nutze Umgebungsvariablen oder sichere Konfigurationsdateien. Alle Benutzereingaben, die in SQL-Abfragen einfließen, müssen über pg_escape_string(), pg_escape_identifier() oder parametrisierte Abfragen via pg_query_params() abgesichert werden.