Signatur
Beschreibung
pg_close() trennt die Verbindung zu einem PostgreSQL-Datenbankserver und gibt die zugehörigen Systemressourcen (z. B. Dateideskriptoren, Speicher) frei. Die Funktion akzeptiert ein PgSql\Connection-Objekt, das zuvor von pg_connect() oder pg_pconnect() zurückgegeben wurde.
In den meisten Anwendungsfällen ist ein expliziter Aufruf von pg_close() nicht notwendig, da PHP am Ende des Skripts alle offenen Verbindungen automatisch schließt. Dennoch empfiehlt es sich, die Verbindung manuell zu schließen, wenn ein Skript viele Verbindungen öffnet, um Ressourcen frühzeitig freizugeben und Engpässe beim Datenbankserver zu vermeiden.
Wichtig: Persistente Verbindungen, die mit pg_pconnect() geöffnet wurden, können mit pg_close() nicht geschlossen werden. Persistente Verbindungen bleiben für die gesamte Lebensdauer des PHP-Prozesses (z. B. eines Apache-Worker-Prozesses) bestehen.
Ab PHP 8.1.0 wird anstelle des älteren resource-Typs ein PgSql\Connection-Objekt verwendet. Der Parameter ist seit PHP 8.0 optional; wird er weggelassen, wird die zuletzt geöffnete Verbindung geschlossen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection | PgSql\Connection | Das PgSql\Connection-Verbindungsobjekt, das von pg_connect() zurückgegeben wurde. Wird der Parameter weggelassen, wird die zuletzt geöffnete, nicht-persistente Verbindung verwendet. |
Rückgabewert
true zurück, wenn die Verbindung erfolgreich geschlossen wurde, oder false bei einem Fehler (z. B. wenn kein gültiges Verbindungsobjekt übergeben wurde).Beispiele
Einfaches Öffnen und Schließen einer PostgreSQL-Verbindung
<?php
$conn = pg_connect('host=localhost dbname=meinedb user=dbuser password=geheim');
if (!$conn) {
die('Verbindung konnte nicht hergestellt werden.');
}
// Datenbankoperationen durchführen
$result = pg_query($conn, 'SELECT version()');
$row = pg_fetch_row($result);
echo 'PostgreSQL-Version: ' . $row[0] . PHP_EOL;
// Verbindung explizit schließen
pg_close($conn);
echo 'Verbindung erfolgreich geschlossen.' . PHP_EOL;
?>
Mehrere Verbindungen nacheinander schließen
<?php
$conn1 = pg_connect('host=localhost dbname=db1 user=user1 password=pass1');
$conn2 = pg_connect('host=localhost dbname=db2 user=user2 password=pass2');
if (!$conn1 || !$conn2) {
die('Mindestens eine Verbindung konnte nicht hergestellt werden.');
}
// Operationen auf db1
pg_query($conn1, 'SELECT 1');
// Operationen auf db2
pg_query($conn2, 'SELECT 2');
// Ressourcen freigeben, sobald die Verbindungen nicht mehr benötigt werden
pg_close($conn1);
pg_close($conn2);
echo 'Beide Verbindungen geschlossen.' . PHP_EOL;
?>
// Wichtig · Fallstricke
Persistente Verbindungen: pg_close() hat keine Wirkung auf Verbindungen, die mit pg_pconnect() geöffnet wurden. Diese werden vom PHP-Prozess verwaltet und bleiben aktiv, bis der Prozess beendet wird.
Veraltete Ressource-Syntax: Vor PHP 8.1 wurde ein resource-Typ verwendet. Ab PHP 8.1 ist dies ein PgSql\Connection-Objekt. Bestehender Code sollte entsprechend angepasst werden.
Automatisches Schließen: Da PHP nicht-persistente Verbindungen am Ende des Skripts ohnehin schließt, ist pg_close() vor allem dann sinnvoll, wenn innerhalb eines langlaufenden Skripts Verbindungen frühzeitig freigegeben werden sollen.