Start · Sprachen · PHP · Referenz · pg_result_error

pg_result_error

Funktion

Gibt die Fehlermeldung zurück, die mit einer PostgreSQL-Ergebniskennung verknüpft ist.

seit PHP 4.2.0 Kategorie: db

Signatur

pg_result_error(PgSql\Result $result): string|false

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

Typ
string|false
Beschreibung
Gibt die Fehlermeldung als Zeichenkette zurück. Ist kein Fehler aufgetreten, wird eine leere Zeichenkette zurückgegeben. Bei einem ungültigen Ergebnisobjekt wird 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);
Fehler: ERROR: relation "nicht_vorhandene_tabelle" does not exist

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);
OK: SELECT * FROM kunden LIMIT 5 Abfrage konnte nicht ausgeführt werden: SELECT * FROM nicht_existent Verbindungsfehler: ERROR: relation "nicht_existent" does not exist

// 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.