Signatur
Beschreibung
pg_set_error_verbosity legt fest, wie ausführlich PostgreSQL-Fehlermeldungen sein sollen, die über pg_last_error und pg_result_error abgerufen werden. Die Einstellung wirkt sich auf alle nachfolgenden Fehler innerhalb der angegebenen Datenbankverbindung aus.
Es stehen drei Detaillierungsgrade zur Verfügung: PGSQL_ERRORS_TERSE liefert nur die wichtigsten Informationen (Schweregrad, Primärnachricht, Position), PGSQL_ERRORS_DEFAULT ist der Standardwert und enthält zusätzlich Details, Hinweise, Kontextinformationen und die Datei-/Zeilenangabe des Fehlers, während PGSQL_ERRORS_VERBOSE alle verfügbaren Felder der Fehlermeldung einschließt.
Diese Funktion ist besonders nützlich beim Debuggen komplexer PostgreSQL-Abfragen oder gespeicherter Prozeduren, bei denen ausführliche Fehlermeldungen schnell zur Fehlerursache führen. In Produktionsumgebungen empfiehlt sich hingegen PGSQL_ERRORS_TERSE, um keine internen Datenbankdetails nach außen zu geben.
Die Funktion gibt den zuvor gültigen Detaillierungsgrad zurück, sodass er bei Bedarf wiederhergestellt werden kann.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | PgSql\Connection | Eine aktive PostgreSQL-Datenbankverbindung, die zuvor mit pg_connect oder pg_pconnect geöffnet wurde. |
|
| $verbosity Pflicht | int | Der gewünschte Detaillierungsgrad. Mögliche Werte sind PGSQL_ERRORS_TERSE, PGSQL_ERRORS_DEFAULT und PGSQL_ERRORS_VERBOSE. |
Rückgabewert
PGSQL_ERRORS_TERSE, PGSQL_ERRORS_DEFAULT oder PGSQL_ERRORS_VERBOSE), sodass er bei Bedarf wiederhergestellt werden kann.Beispiele
Detaillierte Fehlermeldungen beim Debuggen aktivieren
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
// Ausführliche Fehlermeldungen für Debugging aktivieren
$previousVerbosity = pg_set_error_verbosity($conn, PGSQL_ERRORS_VERBOSE);
// Fehlerhafte Abfrage absichtlich ausführen
$result = pg_query($conn, 'SELECT * FROM nicht_vorhandene_tabelle');
if (!$result) {
echo 'Fehler: ' . pg_last_error($conn) . PHP_EOL;
}
// Vorherigen Detaillierungsgrad wiederherstellen
pg_set_error_verbosity($conn, $previousVerbosity);
pg_close($conn);
Minimale Fehlermeldungen in der Produktionsumgebung
<?php
$conn = pg_connect('host=localhost dbname=produktionsdb user=app password=sicher');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
// In Produktion: nur knappe Fehlermeldungen verwenden
pg_set_error_verbosity($conn, PGSQL_ERRORS_TERSE);
$result = pg_query($conn, 'SELECT id FROM benutzer WHERE aktiv = TRUE');
if (!$result) {
// Knappe Fehlermeldung – keine internen Details werden preisgegeben
error_log('DB-Fehler: ' . pg_last_error($conn));
echo 'Ein Datenbankfehler ist aufgetreten. Bitte versuchen Sie es später erneut.';
} else {
while ($row = pg_fetch_assoc($result)) {
echo 'Benutzer-ID: ' . $row['id'] . PHP_EOL;
}
}
pg_close($conn);
// Wichtig · Fallstricke
Sicherheitshinweis: In Produktionsumgebungen sollte PGSQL_ERRORS_TERSE oder PGSQL_ERRORS_DEFAULT verwendet werden. PGSQL_ERRORS_VERBOSE kann interne Datenbankstrukturdetails (wie Dateinamen und Zeilennummern im PostgreSQL-Quellcode) offenlegen, die einem Angreifer nützliche Informationen liefern könnten.
Die Einstellung gilt pro Verbindung und wird nicht global gespeichert. Bei der Verwendung von Verbindungs-Pools sollte der Detaillierungsgrad nach Bedarf neu gesetzt werden.
Ab PHP 8.1 ist der erste Parameter vom Typ PgSql\Connection (ein Objekt) anstelle der früheren Ressource. Älterer Code, der eine Ressource übergibt, ist jedoch weiterhin kompatibel.