OOP mit PHP5 - Praxistutorial 1 - Die Auswertungsschicht
1. Die Abschnitte
- Einführung
- Konstruktor und Destruktor der Db-Klasse
- Konstruktor der Db_Request-Klasse
- Der erste Zugriff
- SQL-Fehler abfangen
- Zusätzliche SQL-Methoden
- Die Auswertungsschicht
- Abfragen
- Zusammenfassung
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