Signatur
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
'') 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);
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);
// 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.