Thread DBI: Exception Model RaiseError (15 answers)
Opened by rosti at 2011-03-23 10:21

rosti
 2011-05-04 21:00
#148259 #148259
User since
2011-03-19
3284 Artikel
BenutzerIn
[Homepage]
user image
Quote
Nein. eval { } ist halt das, was dafuer gut ist, exceptions zu fangen. Was willst du mehr?


Ja, nein, eigentlich haben wir alles, danke ;)

Noch eine kleine Frage in Bezug auf Callback-Funktionen und Fehlerbehandlung. Vorab: Meine Callback-Funktionen verwenden ein prepared Statement, dem folgt das execute und dann wird pro Record die Callbackfunktion aufgerufen und die bringt das Ergebnis auf STDOUT.

Nun ist es so, dass ein Statement auch mal fehlschlagen kann und die Callbackfunktion bekommt das nicht mit. In dem Moment, wo die Callbackfunktion greift, ist die Ausgabe schon vorbereitet, z.B. wurde zu diesem Zeitpunkt bereits ein header gesendet, ein Menu und der Kopf einer Tabelle mit Überschriften. Wenn da jetzt noch eine Fehlermeldung rein soll, passt das nicht so richtig.

Meine Lösung:

Ich rufe die Methode meiner DB-Klasse zweimal auf, einmal ohne Referenz auf die Callbackfunktion und einmal mit Referenz auf die Callbackfunktion.

In der DB-Class-Method wird das Statement mit eval{} getestet und im Fehlerfall $@ zurückgegeben. Nach dem ersten Aufruf liegen klare Verhälnisse vor, im Fehlerfall -> Fehlerseite. Wenn kein Fehler aufgetreten ist, wird jetzt erst an dieser Stelle die Ausgabe vorbereitet (Header usw.) und dann die Method der DB-Klasse erneut gerufen, diesesmal mit der Referenz auf die Callbackfunktion, die dann Record für Record ausgibt.

Hmmm, ja, geht. Wie macht Ihr das so???




View full thread DBI: Exception Model RaiseError