globale Fehlerbehandlung für Datenbankfehler
Bene
- php
Hallo,
folgendes:
ich habe in meinem skript ein Haufen Datenbankzugriffe.
Für die Datenbankzugriffe benutze ich die OO-Schnittstelle.
Eine ungültige Abfrage (u.U. wegen einem fehlenden/fehlerhaften Parameter) führt zu einem Fatal Error: Fatal error: Call to a member function fetch_assoc() on a non-object.
Jetzt könnte ich natürlich, nach jeder Query abfragen, ob eine gültige Ressource vorliegt. Gibt es da eine Möglichkeit, solche Fehler global abzufangen? Ich habe es schon mit set_error_handler probiert, aber der fängt diese Fehler nicht ab.
Danke und Viele Grüße
Bene
Hi,
Für die Datenbankzugriffe benutze ich die OO-Schnittstelle.
aha, Du denkst also objektorientiert.
Jetzt könnte ich natürlich, nach jeder Query abfragen, ob eine gültige Ressource vorliegt. Gibt es da eine Möglichkeit, solche Fehler global abzufangen?
Natürlich: Indem Du global die statische Methode des von Dir erstellten Objektes verwendest, welches diese Fehler abfängt und sinnvoll behandelt.
Ich habe es schon mit set_error_handler probiert, aber der fängt diese Fehler nicht ab.
Fehler werden nicht abgefangen. Sie werden abgefangen und behandelt - oder durchgereicht.
Cheatah
Hallo,
danke für die Antwort.
ich benutze für den Zugriff mysqli.
Ich hab mir mal folgendes als Lösung überlegt und würde mir mal gerne deine/eure Meinung dazu hören:
Ich leite eine Klasse von mysqli ab, die query so überschreibt, das in der Methode query der Basisklasse aufgerufen wird, sondern auch gleichzeitig das Ergebnis der query geprüft wird. Falls es ein Fehler gab, löse ich mit trigger_error eine Fehler aus, der von meiner globalen Funktion behandelt wird (Ok, das ist ein kleiner Umweg, aber so laufen alle Fäden der Fehlerbehandlung bei der globalen Funktion zusammen).
würd mich über eine antwort freuen.
grüße
bene
Hi,
ich benutze für den Zugriff mysqli.
das ändert nichts.
Ich leite eine Klasse von mysqli ab,
Möglich, aber IMHO nicht wirklich sinnbehaftet. Schreibe eine Klasse, welche Deine Use-Cases der Datenbankzugriffe abbildet und sich dann (z.B. per Factory-Pattern) mysqli bedient.
Cheatah
Hallo,
Danke auch dafür.
Deinen Tipp mit der Abbildung der Use-Cases der Datenbankzugriffe hört sich interessant an, verstehen tu ich ihn aber nicht. Sicherlich ist es auch zu viel das hier zu erklären. Kannst du mir vielleicht eine URL geben?
Grüße
Bene
echo $begrüßung;
Deinen Tipp mit der Abbildung der Use-Cases der Datenbankzugriffe hört sich interessant an, verstehen tu ich ihn aber nicht.
Ein Use Case ist ein Anwendungsfall. Für jeden deiner Anwendungsfälle schreibst du dir eine Funktion, Methode, was auch immer. Diese bekommt die notwendigen Parameter aus Sicht deiner Anwendung übergeben, also Suchkriterien, die Daten zum Abspeichern, und so weiter, nicht jedoch fremde Daten wie Verbindungskennung, Username und Passwort des DBMS oder SQL-Befehle oder Teile davon. Als Rückgabe erhältst du einen Statuswert oder die abgefragten Daten. Damit hältst du deine Anwendung von datenbankspezifischen Dingen frei (und kannst, wenn es später erforderlich wird, durch Ändern dieser Abstraktionsschicht auf ein anderes DBMS oder auch auf Dateien oder einen Webservice umsteigen, ohne dass deine Daten-Eingabe- und -Anzeige-Logik geändert werden muss).
Fehler können über den erwähnten Statuswert (z.B. statt des Ergebnisdatensätze-Arrays) oder mittels Exceptions an den Aufrufer gemeldet werden.
echo "$verabschiedung $name";