Mahlzeit;
für die Implementierung einer Insert-Universal-Methode gibt es zumindest in Perl 2 Möglichkeiten
- über prepared Statements
- direktes insert
Bei beiden wären Tabellenname und col=>val
zu übergeben, bei (1) zusätzlich und optional eine sog. finish
Anweisung. Stell Dir vor, Du feuerst eine Reihe von Inserts über eine Schleife, erst hier kommen ja prepared Statements erst richtig zum Tragen. Also wäre das Statement zu cachen, das kannst Du über static
machen oder in der Instanz. Ob (2) in PHP überhaupt möglich ist, kann ich nicht beurteilen. Auf jeden Fall ist es unnötig, für ein einmaliges Insert ein extra Statement zu präpariern, weil es ja nur einmal gebraucht wird. Das setzt natürlich voraus, daß eine Methode zum Quoten vorhanden ist, in Perl gibt es 2 Methoden, quote_identifier
und quote
zur Vermeidung von Injektions.
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).
Genau. Hier kommen Klassenerweiterungen ins Spiel. Ich hab das immer so gemacht, daß jede qualifizierte Subklasse eine Methode create
hat womit für sämtliche Tabellen die Create-Statements verewigt sind. Damit sind sie auch dokumentiert. Bspw. definiert meine Klasse MyDBI_Log
in der create-Methode das Create-Statement zum Erstellen der Tabelle log
.
Eine Methode truncate() hingegen kann wiederum in der Basisklasse definiert sein, da wird ja eh nur der Tabellenname übergeben. Weitere Kandidaten für Universalmethoden wären describe
, show tables
und show create
und evntl. auch die Möglichkeit zur freien Übergabe von SQL Anweisungen. Mit der richtigen Klasse in der Hand kannst Du das ganze DB-Management auf der Kommandozeile abfackeln ohne mit der Maus in phpmyadmin rumzufummeln.
Und falls Deine gesammelten Werke einer Versionskontrolle unterliegen könntest Du auch über eine Metohde alter() nachdenken. Dann landen auch die gesammelten Änderungen am DB Design im Repository. Nicht vergessen, dann auch die create()-Methode anzupassen.
MfG