Das DBObject, mein momentaner Stolz unter den sinnvollen Sachen die ich entwickelt habe.
Im folgenden werde ich die Möglichkeiten erläutern, die das DBObject bietet.
Einfache Nutzung
$obj = new DBObject($tablename,$data);
Ich denke der Parameter $tablename erklärt sich selbst
Ich muss zugeben, das der Name für den Parameter $data etwas ungenau ist, denn er bietet mehr als nur das übergeben von Daten.
- Handelt es sich um ein Array, so werden die Elemente des Arrays als Daten behandelt und in den Datensatz des DBObjects aufgenommen.
- Handelt es sich um eine Zahl, so wird diese als ID eine Datensatzes in der Datenbank angesehen und entsprechender Datensatz wird abgefragt.
- Handelt es sich um einen String, so wird eine Abfrage an die Datenbank gemacht und der String wird an des SQL-Statement angefügt.
Beispiele:
$newObj = new DBObject($table, array("name"=>$name,"text"=>$text) );
//1.
$objWithId = new DBObject($table, 5);
//2.
$obj = new DBObject($table, "WHERE name like 'hanno'" );
//3.
“Das sind ja doch SQL-Befehle” – Dem muss ich (leider) zustimmen, aber ich habe keinen simpleren Weg gefunden die möglich zu machen.
“Ist das nicht unsicher einen String einfach so anzuhängen, das lässt sich doch prima für SQL-Injections ausnutzen.”- Nunja, ich gehe einfach davon aus, das der Nutzer dieses Codes schlau genug ist vorher die variablen Teile des Codes gegen SQL-Injections zu sichern.
Alle Felder der Tabelle sind als Eigenschaften des Objekts vorhanden
$name = $obj->name;
Datenmanipulation
Um die Daten weitergehend zu manipulieren gibt es die Funktionen:
- select( [$sql-string] )
- insert()
- update()
- delete( [$sql-string], [$limit] )
Ich hoffe die Namen sind selbsterklärend. $sql-string ist ein optionaler String der an den SQL-Befehl angehängt wird. Soll mehr als eine Zeile gelöscht werden, so muss der optionale Parameter entsprechend angepasst werden.
Weitere Methoden
Die grundlegende Nutzung ist erklärt, jetzt kommen noch ein paar Sachen für den Komfort.
function exists($field) : Prüft ob das Feld $field in der Tabellenstruktur vorhanden ist.
function addField($name, $type) : Fügt eine neues Feld mit dem Namen $name vom Typ $type in die Tabelle ein.
function _toSmarty(smarty $smarty, [$templateName] ) : Ich arbeite häufiger mit der Template-Engine Smarty, daher biete diese Funktion die Möglichkeit alle Felder nach Smarty zu übergeben und auch direkt anzuzeigen, sofern ein Template angeben ist.
function _toTemplate($template) : Ähnlich wie die _toSmarty-Funktion gibt diese Funktion ein (HTML-)Template aus. Hierbei werden alle {$field} durch die entsprechenden Werte ersetzt.
function asArray( [array $arr], [$keyprefix] ) : fügt die Daten des DBObjects in ein Array, welches über den Parameter $arr übergeben werden kann. Ist der Parameter $keyprefix gegeben, so erhalten alle Schlüssel diesen als Präfix.
Erweiterte Eigenschaften der Klasse
Zu guter letzt bietet die Klasse noch 2 Eigenschaften die sich nur über Flags aktivieren lassen.
Standardmäßig werden keine Fehler ausgegeben und alle Fehlermeldungen unterdrückt. Sollen Fehler ausgegeben werden muss dies explizit über define("DBO_TRIGGER_ERRORS",true); aktiviert werden.
Außerdem bietet die Klasse die Möglichkeit nicht vorhandene Tabellen in der Datenbank automatisch aus den gegebenen Datensätzen zu erzeugen.
$dbo = new DBObject(
"news",
array(
"title"=>"Some Title",
"text"=>"Some Text",
"cat"=>5,
"authorid"=>1
)
);
Der Code würde eine solche Tabelle erzeugen (SQL-Code)
CREATE TABLE news ( `id` int(11) NOT NULL auto_increment, `title` varchar(255) NOT NULL, `text` varchar(255) NOT NULL, `cat` int(11) NOT NULL, `authorid` int(11) NOT NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=1;
Damit dies geschieht muss das Flag DBO_AUTOINSTALL gesetzt sein. define("DBO_AUTOINSTALL",true);