Hauptmenü

Untermenü

OOP mit PHP5 - Praxistutorial 1 - SQL-Fehler abfangen

1. Die Abschnitte

2. Und nun richtig

Im dritten Einstiegstutorial haben wir permanent mit or die gearbeitet. Jetzt machen wir das über Exceptions. Dabei müssen wir folgende Problemfälle unterscheiden. Ein Query kann fehlerhaft sein oder er bringt es einfach nicht. Soll heißen, er ist zwar syntaktisch korrekt, aber es passiert nichts.

Das ist so ähnlich wie beim Sex. Der erste Fall entspricht also dem männlichen worst-case-Szenario in Form einen Penisbruches. Nein, dazu gibt es keine Verlinkung auf Wikipedia, da wird mir schon bei dem Gedanken daran schlecht. Fragt mal Dieter Bohlen, wenn ihr ihn seht. Dem ist das schon passiert. Und dann hat er wohl einen Gips bekommen, wo jeder seinen Namen drauf schreiben konnte. Ja, ich weiß. Der Witz ist nicht von mir. Der zweite Fall entspricht dann einer popeligen Erektionsstörung und ist wohl schon mal jedem passiert. Nein, uns natürlich nicht!

3. Folgerungen

Wenn man sich sein bestes Stück verknickt hat, so geht man natürlich zum Arzt. Wenn dagegen nur der Schrumpfmann vorbeikommt so kann man damit erst mal leben. Das bedeutet für unsere Klasse Db, dass wir beide Fälle abfangen müssen. Darum trennen wir die Logik auf. Es gibt eine Methode, um den Query abzusenden und mehrere für die jeweilige Auswertung des Ergebnisses.

Die Methode zum Abfragen senden


public function startQuery($query) 
{
  $this -> resource mysql_query($query);
  if ($msg mysql_error()) 
  {
    throw new Exception ($msg);
  }
}

Erläuterung

Eigentlich gibt es nicht viel zu sagen. Wir schicken den Query an die Datenbank und wenn die einen Syntax-Fehler meldet, so werfen wir die entsprechende Meldung mit $msg. Aber!

4. Wichtig!

Im Gegensatz zur prozeduralen Programmierung und der die-Variante aus dem dritten Einstiegstutorial gibt es hier eine Besonderheit. Denn wenn der Query syntaktisch fehlerhaft ist, so löst das einen Fatal Error aus und das Script wird abgebrochen! Allerdings wird der dann auf jeden Fall ausgegeben und wir können ihn nicht abfangen und umleiten. Im Falle eines Ajax-Request wäre dann alles im Ar***.

Aber!

Das ist nicht Sinn der Sache, Programmierfehler per Exceptions abzufangen. Sie dienen einzig und allein dem Zweck, auf unvorhergesehene Fehler zu reagieren. Denn wenn sich aus einem unerfindlichen Grund der MySQL-Server in die ewigen Jagdgründe verabschiedet oder wir keine Ahnung von SQL-Statements haben, so sind das zwei völlig verschiedene Paar Schuhe. Oder wenn ein Vollhonk in der Firma eine Tabelle umbaut und keinem Bescheid sagt.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt