pg_connect() - pg_last_error => keine Information

Hallo,
nachdem ich mit der Hilfe hier im Forum ein Problem klären konnte, tut sich nun ein weiteres auf und ich habe bisherige Fundstücke getestet, aber irgendwie habe ich langsam den Verdacht, daß ich auf dem falschen Weg bin.

  • PostgreSQL 9.6

Wenn ich mit

$conn_string = $conn_nutzer .  " user=NUTZER password=PASSWORD_Nutzer application_name=" . $_SESSION['nutzer'];
$dbconn = @pg_connect($conn_string);

die Verbindung aufbaue, um den Erfolg oder eben Mißerfolg anschließend auszuwerten mit:

if ($dbconn)
{
alles ok - Datenzugriffe ausführen
}
else
{
Problem aufgetreten
}

im else dann versuche mit pg_last_error() die für den Entwickler interessante Meldung:

Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "127.0.0.1", user "NUTZER", database "DATENBANK", SSL off in PFAD/DATEI.php on line 205

zu bekommen scheitere ich kläglich.

pg_last_error() habe ich auch schon verwendet bei

$dbconn = @pg_connect($conn_string) or die(pg_last_error());

Ich bekomme immer nur eine “leere Antwort” - NICHTS.
Wenn ich die Verbindung ohne das fehlerunterdrückende @ herstelle, kommt die obige Fehlermeldung, aber die möchte ich dem Nutzer nicht zeigen, sondern in meine Log-Datei schreiben. Der Nutzer soll einen Hinweis bekommen und fertig, aber keine Hintergrundinformationen zur Datenbankverbindung. Auch würde den Wenigsten die Information irgendetwas bedeuten, daher eine passende selbst formuliert und mir die wichtigen Informationen ins log geschrieben.

Ich suche gerne noch etwas weiter, bin mir aber momentan unsicher, was ich noch falsch mache - laut Beschreibung soll pg_last_error() genau die Meldung liefern, die ich benötige - oder habe ich das falsch gelesen/gedeutet?

Gruß und Dank
Rainer

das Problem scheint bekannt zu sein, bzw. die Ursache ist wohl, daß pg_last_error() hier nicht arbeiten kann, weil es ja noch keine Verbindung zur DB gibt.
Kannst Du PDO nutzen? Damit sollte es wohl gehen…

Hallo,
mit PDO habe ich bisher noch nicht gearbeitet - bin aber offen für Änderungen, wenn sie meine Probleme lösen. :wink:

Könnte etwas umfangreichere Änderungen nach sich ziehen, nachdem ich mal kurz auf die Seiten bei php.net geschaut habe. Der Parameter application_name muß verwendetwerden können, in den ersten gefundenen Beispielen ist der nicht aufgetaucht, ansonsten wäre das KEINE Alternative für mich!

Und wieder was am Anfang vergessen…:

  • PHP 5.5/5.6 - PHP 7 soll bald aktiviert werden, ist also ab sofort die Basis.

Danke schonmal für den Hinweis, melde mich, wenn ich was brauchbares gefunden oder auch das eine oder andere Problem gefunden habe. :wink:

Gruß Rainer

hilft Dir https://stackoverflow.com/questions/4253136/how-to-catch-pg-connect-function-error weiter?

Hallo,
vielen Dank für Deinen Hinweis. Ich hatte den Eintrag gestern auch schon vor meiner Anfrage gefunden, aber war wohl schon so blind, daß ich die dort stehende Lösung nicht erkannt habe. :-((

Habe es eben testen können und kann sagen: DANKE, es funktioniert!

Die Recherchen zu PDO waren gestern, wegen dem zu erwartenden Aufwand der notwendigen Umstellung in meiner Anwendung, eher abschreckend. Da gefällt mir das mit der Exeption schon viel besser. :wink:

Gruß Rainer