Hauptmenü

Untermenü

OOP mit PHP5 - Praxistutorial 1 - Die Auswertungsschicht

1. Die Abschnitte

2. Der Zwischenschritt

Da unsere Db_Request-Klasse für die Auswertung von SQL-Abfragen zuständig ist, bauen wir jetzt mal eine Methode ein, mit der wir auf die insertData-Methode aus der Db-Klasse zugreifen. Dafür müssen wir natürlich eine Fallunterscheidung treffen. Also handelt es sich um ein INSERT- oder UPDATE-Statement. REPLACE INTO ignorieren wir hier.


public function saveEntry($query)
{
  if (false !== strpos(strtolower($query), 'update')) {
    $msg ' updated';
  }
  else {
    $msg ' inserted';
  }
}

Erläuterung

Die eigentliche SQL-Abfrage übergeben wir später als Parameter an die Methode saveEntry. Mit strtolower($query) sorgen wir dafür, dass es lattens ist, ob jemand die SQL-Befehle groß oder klein schreibt. Man weiß ja nie. Dementsprechend wird dann die Variable $msg gefüllt. Das könnte man auch über einen regulären Ausdruck prüfen, der sich nur das erste Wort vornimmt, aber das ist meiner Meinung nach das berühmte Schießen mit Kanonen auf Spatzen.

3. SQL-Statement senden

Dazu bauen wir unter obiger Bedingung einfach den folgenden Code ein.


$this -> db -> startQuery($query);

Erläuterung

Warum gibt es hier keine Ausnahmebehandlung mit try und catch? Ganz einfach. Weil wir im Falle einer fehlerhaften Anfrage in der Db-Klasse schon eine Exception werfen.


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

Und das löst bereits einen Fatal Error aus. Dazu habe ich mich ja schon vorher ausgelassen. Und wer noch Verständnisprobleme hat, soll auf die Zusammenfassung warten, da werde ich darauf noch mal eingehen.

4. Ergebnis auswerten

Wenn denn nun der Query syntaktisch einwandfrei ist, so machen wir uns an die Auswertung. Dazu reicht der folgende Code unterhalb der Anweisung $this -> db -> startQuery($query).


$result $this -> db -> insertData();
if (is_int($result))
{
  $this -> message['data'] = $result;
  $this -> message['status'] = 'completed';
  $this -> message['message'] = $msg;
}
else if (!is_int($result))
{
  $this -> message['status']  = 'failed';
  $this -> message['message'] = $result;
}

Erläuterung

Wenn wir mit einem INSERT- oder UPDATE-Statement Daten eingefügt oder geändert haben, so liefert uns die Methode insertData entweder die Anzahl der betroffenen Datensätze oder die ID des neuen Datensatzes zurück. Darum prüfen wir mit if (is_int($result)), ob es sich bei dem Rückgabewert um eine Zahl handelt. Ansonsten bekommen wir mit return mysql_info() die Information, dass eigentlich nichts passiert ist.

Und wie das nun im Detail aussieht, zeige ich euch jetzt.

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