Noch eine Überlegung zum Sinn und Zweck einer solchen Klasse. Man könnte eine Universal-Methode vorhalten z.B. für Insert-Statements. So wäre der Name der Tabelle das erste zu übergebende Argument und die weiteren Argumente liegen in einem assoziativen Array nach dem Schema
colname=>value
$pdo->insert('address', array(name => 'Fuß', vname => 'Konrad'));
Das war der Sinn warum ich damit angefangen habe. DB->insert()
sieht gerade so bei mir aus:
//DB -> insert ('tablename',
// ["colA" => 1, "colB" => 2, ...] || [["colA" => 1, "colB" => 2], ["colA" => 2, "colB" => 3], ...] )
public function insert ( $table, $data ) {
$columns = implode( ", ", array_keys( isset($data[0]) ? $data[0] : $data ) );
$placeholders = substr ( str_repeat("?, ", count( isset($data[0]) ? $data[0] : $data ) ) , 0, -2 );
$query = "INSERT INTO {$table} ({$columns}) VALUES ({$placeholders})";
$stmt = self::$instance -> prepare( $query );
if ( isset($data[0]) ) {
foreach ( $data as $toBind ) {
if ( !$stmt -> execute( array_values( $toBind ) ) ) {
return false;
}
}
} else {
if ( !$stmt -> execute( array_values( $data ) ) ) {
return false;
}
}
return true;
}
Logisch schwieriger finde ich es bei einem Select-Statement und Update-Statements. Nehmen wir an es gibt einen Wald in meiner Datenbank. Dieser Wald besteht aus Bäumen, welche Äste besitzen an denen Blätter hängen.
Nun geht ein Wanderer immer den gleichen Weg durch den Wald und kennt jeden Baum am Rand seines Weges.
Objekt orientiert würde ich jetzt für jeden Baum, den er kennt, einzeln ein Objekt erzeugen welches die Daten über sein Äste aus der Datenbank holt, um dann für jeden Ast, neue Blätter Objekte zu erzeugen welche die Daten wieder einzeln aus der Datenbank holen.
Das nutzt nach meinem Verständnis aber nicht die Vorteile von Prepared Statements. (siehe dazu).
Wohingegen procedual, ich einfach 3 Statments vorbereiten kann (nämlich Select Baum, Select Ast, Select Blatt) und für den entsprechenden Wald ich in geschachtelten Schleifen alle Statments ausführen kann um dann ein Array mit allen Daten habe.
Zudem muss ich mir jetzt überlegen ob ich unterschiedliche Klassen für einen Wald mache, einmal zum erzeugen des Waldes und einmal zum bearbeiten des Waldes (Bäume wachsen, Blättern fallen im Herbst, Wanderer entscheiden sich einen neuen Weg zu gehen).
Gruß
Jo