Signatur
Beschreibung
pg_result_error() liest die Fehlermeldung aus, die einem PostgreSQL-Abfrageergebnis zugeordnet ist. Sie wird typischerweise eingesetzt, wenn eine Datenbankoperation fehlschlägt und man den genauen Fehlertext des PostgreSQL-Servers ermitteln möchte, um ihn zu loggen oder dem Entwickler anzuzeigen.
Im Gegensatz zu pg_last_error(), das den letzten Fehler der gesamten Verbindung zurückgibt, bezieht sich pg_result_error() gezielt auf ein einzelnes Ergebnis-Objekt. Das ist besonders nützlich, wenn mehrere Abfragen nacheinander ausgeführt werden und man den Fehler einer bestimmten Abfrage isolieren möchte.
Die Funktion gibt eine leere Zeichenkette zurück, wenn kein Fehler vorliegt, und false, wenn das übergebene Ergebnis-Objekt ungültig ist. Für detailliertere Fehlerinformationen (z. B. SQLSTATE-Code, Spaltenname) steht pg_result_error_field() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | PgSql\Result | Ein PostgreSQL-Ergebnisobjekt, das von Funktionen wie pg_query(), pg_query_params() oder pg_execute() zurückgegeben wurde. |
Rückgabewert
false zurückgegeben.Beispiele
Fehlermeldung einer fehlgeschlagenen INSERT-Abfrage auslesen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// Absichtlich fehlerhafte Abfrage (Tabelle existiert nicht)
$result = pg_query($conn, 'INSERT INTO nicht_vorhandene_tabelle (id) VALUES (1)');
if ($result === false) {
// pg_query gibt false zurück, aber pg_last_error gibt die Fehlermeldung
echo 'Fehler: ' . pg_last_error($conn);
} else {
$fehler = pg_result_error($result);
if ($fehler !== '' && $fehler !== false) {
echo 'Abfragefehler: ' . $fehler;
} else {
echo 'Abfrage erfolgreich ausgeführt.';
}
pg_free_result($result);
}
pg_close($conn);
Fehlerstatus mehrerer Abfragen einzeln prüfen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
$abfragen = [
'SELECT * FROM kunden LIMIT 5',
'SELECT * FROM nicht_existent',
];
foreach ($abfragen as $sql) {
$result = @pg_query($conn, $sql);
if ($result !== false) {
$fehler = pg_result_error($result);
if ($fehler === '' || $fehler === false) {
echo "OK: {$sql}\n";
} else {
echo "Fehler bei '{$sql}': {$fehler}\n";
}
pg_free_result($result);
} else {
echo "Abfrage konnte nicht ausgeführt werden: {$sql}\n";
echo 'Verbindungsfehler: ' . pg_last_error($conn) . "\n";
}
}
pg_close($conn);
// Wichtig · Fallstricke
Hinweis zur Fehlerbehandlung: pg_query() gibt bei einem Fehler direkt false zurück, sodass es kein Ergebnisobjekt gibt, auf das pg_result_error() angewendet werden könnte. In diesem Fall muss stattdessen pg_last_error() verwendet werden, um die Fehlermeldung der Verbindung abzurufen.
Detailliertere Fehlerinfos: Für strukturierte Fehlerinformationen wie den SQLSTATE-Code oder den Namen der betroffenen Tabelle bzw. Spalte sollte pg_result_error_field() zusammen mit den entsprechenden PGSQL_DIAG_*-Konstanten verwendet werden.
Sicherheit: Fehlermeldungen sollten niemals ungeprüft an den Endnutzer ausgegeben werden, da sie interne Datenbankstruktur preisgeben können. Fehler nur loggen und dem Nutzer eine generische Meldung anzeigen.