Start · Sprachen · PHP · Referenz · pg_last_error

pg_last_error

Funktion

Gibt die zuletzt aufgetretene Fehlermeldung einer PostgreSQL-Verbindung als Zeichenkette zurück.

seit PHP 4.2.0 Kategorie: db

Signatur

pg_last_error(?PgSql\Connection $connection = null): string

Beschreibung

pg_last_error() liest die letzte Fehlermeldung aus, die auf einer PostgreSQL-Verbindung aufgetreten ist. Die Meldung wird direkt von libpq übernommen und enthält sowohl SQL-Fehler als auch Verbindungsprobleme. Sie eignet sich daher gut zur Fehlerdiagnose nach einer fehlgeschlagenen Datenbankoperation.

Wird kein $connection-Parameter übergeben, verwendet PHP die zuletzt geöffnete Verbindung. In Anwendungen mit mehreren gleichzeitigen Verbindungen sollte immer explizit die gewünschte Verbindungsressource übergeben werden, um Verwechslungen zu vermeiden.

Die Funktion gibt immer eine Zeichenkette zurück – auch wenn kein Fehler vorliegt, ist der Rückgabewert dann lediglich ein leerer String. Typischerweise prüft man zunächst, ob eine Funktion wie pg_query() false zurückgibt, und ruft anschließend pg_last_error() auf, um die genaue Fehlermeldung zu ermitteln.

Ab PHP 8.1 erwartet die Funktion ein Objekt vom Typ PgSql\Connection anstatt einer Ressource. Ältere Ressource-basierte Verbindungen werden automatisch durch einen Wrapper dargestellt, sodass bestehender Code in der Regel weiterhin funktioniert.

Parameter

Name Typ Default Beschreibung
$connection PgSql\Connection|null null Eine PostgreSQL-Verbindung, die mit pg_connect() oder pg_pconnect() geöffnet wurde. Wird null übergeben oder der Parameter weggelassen, verwendet PHP die zuletzt geöffnete Verbindung.

Rückgabewert

Typ
string
Beschreibung
Gibt die letzte Fehlermeldung der angegebenen Verbindung als Zeichenkette zurück. Liegt kein Fehler vor, wird ein leerer String ('') zurückgegeben.

Beispiele

Fehlermeldung nach fehlgeschlagener Abfrage auslesen

<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');

if (!$conn) {
    die('Verbindung fehlgeschlagen.');
}

// Absichtlich fehlerhafte SQL-Abfrage
$result = pg_query($conn, 'SELECT * FROM nicht_vorhandene_tabelle');

if ($result === false) {
    $fehler = pg_last_error($conn);
    echo 'Datenbankfehler: ' . htmlspecialchars($fehler);
}

pg_close($conn);
Datenbankfehler: ERROR: relation "nicht_vorhandene_tabelle" does not exist

Fehlerbehandlung mit mehreren Verbindungen

<?php
$conn1 = pg_connect('host=localhost dbname=db1 user=postgres password=secret');
$conn2 = pg_connect('host=localhost dbname=db2 user=postgres password=secret');

$result = pg_query($conn2, 'INSERT INTO bestellungen (id) VALUES (NULL)');

if ($result === false) {
    // Explizit conn2 übergeben, um die richtige Fehlermeldung zu erhalten
    $fehler = pg_last_error($conn2);
    error_log('Fehler auf Verbindung 2: ' . $fehler);
    echo 'Ein Datenbankfehler ist aufgetreten. Bitte versuchen Sie es später erneut.';
}

pg_close($conn1);
pg_close($conn2);
Ein Datenbankfehler ist aufgetreten. Bitte versuchen Sie es später erneut.

// Wichtig · Fallstricke

Sicherheitshinweis: Fehlermeldungen von pg_last_error() dürfen niemals ungeprüft an den Browser ausgegeben werden, da sie interne Datenbankstruktur, Tabellen- und Spaltennamen preisgeben können. Verwende stets htmlspecialchars() vor der Ausgabe und logge detaillierte Fehlermeldungen besser serverseitig, z. B. mit error_log().

Die Fehlermeldung wird nach einem erfolgreichen Befehl nicht automatisch geleert. Sie bezieht sich immer auf den letzten aufgetretenen Fehler und kann daher irreführend sein, wenn zwischenzeitlich weitere Operationen ausgeführt wurden. Prüfe deshalb immer den Rückgabewert der jeweiligen Funktion, bevor du pg_last_error() aufrufst.

Ab PHP 8.1 wurden PostgreSQL-Ressourcen durch Objekte der Klasse PgSql\Connection ersetzt. Die Übergabe einer alten Ressource erzeugt eine Deprecation-Warnung.