Signatur
Beschreibung
pg_connection_reset() schließt die bestehende Verbindung zum PostgreSQL-Server und stellt sie anhand der ursprünglich verwendeten Verbindungsparameter automatisch wieder her. Die zurückgegebene Verbindungsressource bleibt dabei dieselbe – es wird lediglich der interne Zustand zurückgesetzt.
Diese Funktion ist besonders nützlich, wenn eine Datenbankverbindung in einen Fehlerzustand geraten ist (z. B. nach einem Netzwerkfehler oder nach einem abgebrochenen Transaktionszustand), ohne dass die Anwendung eine komplett neue Verbindung aufbauen muss. Mit pg_connection_status() lässt sich prüfen, ob die Verbindung sich im Status PGSQL_CONNECTION_BAD befindet, bevor ein Reset durchgeführt wird.
Im Gegensatz zu einem expliziten pg_close() gefolgt von pg_connect() erhält man mit pg_connection_reset() dasselbe Verbindungs-Objekt zurück, was besonders bei Verbindungs-Pooling oder bei der Weitergabe von Verbindungsobjekten an andere Funktionen praktisch ist.
Wichtig: Alle offenen Transaktionen und nicht gespeicherten Daten gehen beim Zurücksetzen verloren. Die Funktion sollte daher nur dann aufgerufen werden, wenn sichergestellt ist, dass keine aktive Transaktion mehr läuft oder diese bewusst verworfen werden soll.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | PgSql\Connection | Eine gültige PostgreSQL-Verbindungsinstanz, wie sie von pg_connect() oder pg_pconnect() zurückgegeben wird. |
Rückgabewert
true zurück, wenn der Verbindungs-Reset erfolgreich war, andernfalls false.Beispiele
Verbindung nach Fehler zurücksetzen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
// Prüfe den Verbindungsstatus
if (pg_connection_status($conn) === PGSQL_CONNECTION_BAD) {
echo "Verbindung fehlerhaft – versuche Neuverbindung...\n";
$result = pg_connection_reset($conn);
if ($result) {
echo "Verbindung erfolgreich zurückgesetzt.\n";
} else {
die("Neuverbindung fehlgeschlagen.\n");
}
} else {
echo "Verbindung ist in Ordnung.\n";
}
pg_close($conn);
?>
Reset nach fehlgeschlagener Transaktion
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
// Starte eine Transaktion
pg_query($conn, 'BEGIN');
// Simuliere einen Fehler (ungültige Abfrage)
$res = pg_query($conn, 'SELECT * FROM nicht_existente_tabelle');
if (!$res) {
echo "Abfragefehler: " . pg_last_error($conn) . "\n";
// Verbindung zurücksetzen, um sie wieder nutzbar zu machen
if (pg_connection_reset($conn)) {
echo "Verbindung erfolgreich zurückgesetzt – bereit für neue Abfragen.\n";
} else {
echo "Reset fehlgeschlagen.\n";
}
}
pg_close($conn);
?>
// Wichtig · Fallstricke
Transaktionssicherheit: Beim Aufruf von pg_connection_reset() wird eine eventuell noch offene Transaktion nicht mit ROLLBACK beendet, sondern der Verbindungszustand wird hart zurückgesetzt. Nicht gespeicherte Änderungen gehen unwiderruflich verloren.
Verbindungsparameter: Der Reset nutzt intern die ursprünglichen Verbindungsparameter. Wurden diese z. B. via Umgebungsvariablen oder einem Verbindungs-String gesetzt, müssen diese beim Reset noch gültig sein.
Ab PHP 8.1 ist der Parametertyp PgSql\Connection statt der früheren Ressource resource.