Catchen von DB-Exceptions?!

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Catchen von DB-Exceptions?!

Beitrag von dr.e. » 31.03.2016, 15:48:32

Hallo Well,

das ist absolut ein valides Argument!

Lass mich die aktuelle Implementierung (es hat sich evtl. schon etwas geändert) nochmal dahingehend prüfen und wir überlegen gemeinsam eine Lösung.

Einverstanden? :)
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Catchen von DB-Exceptions?!

Beitrag von dr.e. » 17.04.2016, 17:53:45

Hallo Well,

ich habe den Thread nun nochmal komplett durchgearbeitet und die einzelnen Problem-Punkte zusammengefasst:
  1. Testen der Verbindung nicht möglich, da erst Konfigurationsdatei angelegt werden muss.
  2. Falsche Zugangsdaten oder andere Fehler in den Verbindungsparametern erzeugen keine (saubere) Exception.
  3. Bei fehlender "mysql"-PHP-Extension tritt ein Call to undefined function mysql_connect() auf.
  4. Applikation "stirbt schweigend", wenn keine "mysql"-PHP-Extension vorhanden ist.
1) Testen der Verbindung + 2) Keine Exception geworfen
Mit der Erweiterung/Verbesserung der API in 1.14 und darüber ist es nun ohne Probleme möglich eine Datenbank-Verbindung zu testen. Beispiel:

Code: Alles auswählen

try {
   $conn = new MySQLiHandler();
   $conn->setHost('foo');
   $conn->setPort(3306);
   $conn->setUser('bar');
   $conn->setPass('bla');
   $conn->setup();
} catch (\APF\core\database\DatabaseHandlerException $e) {
   echo $e;
} 
Bei einem Fehler in den Verbindungsdaten wird nun in allen Fällen eine DatabaseHandlerException geworfen, die mit einem catch abgefangen werden kann. Auch ist es nicht mehr notwendig wie in APF 1.13 erst eine Konfigurationsdatei mit den Verbindungsdaten zu speichern um über den ConnectionManager eine Verbindung zu erzeugen. Jede Datenbank-Verbindung lässt sich bequem auch über den DIServiceManager erzeugen (siehe auch http://adventure-php-framework.org/Seit ... -Container). Letzteres ist inzwischen auch die empfohlene Vorgehensweise weil transparenter und testbarar.

Aus meiner Sicht ist das Thema damit gelöst.

3) Call to undefined function mysql_connect() + 4) Applikation stirbt schweigend
Der MySQLHandler wurde inzwischen aus der Code-Basis entfernt, da die mysql-PHP-Extension als veraltet markiert und in PHP 7 entfernt wurde. Das selbe Verhalten gilt allerdings immer noch für den MySQLiHandler. Dort wird ebenfalls nicht abgefragt ob die notwendige Extension geladen ist oder nicht.

Um die beiden beschriebenen Probleme zu vermeiden könnte der Konstruktor so erweitert werden, dass er einmalig auf das Vorhandensein der Extension prüft und im Negativ-Fall mit einer DatabaseHandlerException und aussagekräftiger Nachricht reagiert. In meinen lokalen Tests konnte ich so ein Fehlen der Extension mit einer Exception abfangen.

Die Code-Änderung integriere ich gleich in den master.

Sofern die Applikation allerdings nicht auf die Exception reagiert, display_errors=0 und log_errors=0 gesetzt sind lässt sich das Problem mit der weißen Seite und dem "stillschweigenden Sterben" leider trotzdem nicht lösen. Das ist jedoch "normales" PHP-Verhalten, das dir bei jedem anderen FATAL_ERROR auch passieren kann.

Ich hoffe das hilft dir weiter und schafft eine Verbesserung! :)

Freue mich auf dein Feedback!
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Catchen von DB-Exceptions?!

Beitrag von dr.e. » 17.04.2016, 18:02:06

Änderungen sind nun unter https://github.com/AdventurePHP/code/co ... da3c82bc0d im master verfügbar. Zu Dokumentationszwecken habe ich http://tracker.adventure-php-framework. ... php?id=296 angelegt.
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Catchen von DB-Exceptions?!

Beitrag von Well » 08.08.2016, 15:32:39

Perfekt, sieht gut aus. :)
Danke

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Catchen von DB-Exceptions?!

Beitrag von dr.e. » 10.08.2016, 14:17:49

Gerne! :) Danke für dein Feedback!
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste