PHP-Klasse für minimale Datenspeicherung in SQLite
Gerade bei kleinen Miniscripten in PHP erwische ich mich immer wieder, dass ich jedes mal einen haufen Zeit darauf aufwende irgendwelche winzigen Datenmengen in einer Mini-Datenbank zu speichern und zu lesen. Schuld daran ist einfach die Tatsache, dass ich mich jedesmal um das Anlegen der Datenstruktur und/oder die SQL-Statements kümmern muss.
Alternativ gibt es auch Momente in denen ich eine einfache Datei zum speichern benutze, aber auch dabei muss ich mich um das öffnen und schließen der Datei kümmern. Davon abgesehen ist dieser Ansatz dann doch eher unflexibel.
Daher habe ich grade mal eine kleine Klasse zusammengebaut welche die Verwaltung der Daten vollständig automatisch übernimmt und eine Datenbank als ein einfaches Datenobjekt repräsentiert. Dabei kümmert sich die Klasse auch um die Erstellung der korrekten Datenbankstruktur. Ideal wenn man einfach eine kleine Menge an Daten irgendwie persistent lagern möchte.
Beispiel wie das ganze im Betrieb jetzt aussieht:
<?php
//Klassendatei importieren (siehe Ende des Artikels für Downloadlink)
include ‚Bardiir/SimpleStorageClass.php‘;
//Die Datei in der die Datenbank gespeichert werden
$dbpath = ‚testdb.sqlite‘;
//ID des Datensatzes. Wechselt man die ID, hat man ein komplett getrenntes Datenobjekt. Die Anzahl der Datenobjekte in einer einzelnen Datenbank ist nicht begrenzt.
$db_id = 1;
//Datenobjekt erzeugen.
$my_data = new Bardiir_SimpleStorageClass($dbpath, $db_id);
//Daten einfügen
$my_data->testdaten = ‚12345‘;
$my_data->blubb = ‚Hello World‘;
//Daten ausgeben
echo $my_data->testdaten; // „12345“
//Daten modifizieren
$my_data->testdaten++;
//Modifizierte Daten ausgeben
echo $my_data->testdaten; // „12346“
//Prüfen ob Daten-Variable gesetzt (hier ja)
echo isset($my_data->testdaten) ? ‚1‘ : ‚0‘; // „1“
//Daten-Variable löschen
unset($my_data->testdaten);
//Prüfen ob Daten-Variable gesetzt (hier nichtmehr)
echo isset($my_data->testdaten) ? ‚1‘ : ‚0‘; // „0“
//Andere Daten ausgeben
echo $my_data->blubb; // „Hello World“
?>
Andere Datei, nachfolgender Aufruf, irgendwann in der Zukunft:
<?php
include ‚Bardiir/SimpleStorageClass.php‘;
$dbpath = ‚testdb.sqlite‘;
$db_id = 1;
$my_data = new Bardiir_SimpleStorageClass($dbpath, $db_id);
//Daten ausgeben
echo $my_data->blubb; // „Hello World“
?>
Die nicht gelöschten Daten sind noch da 🙂
Theoretisch kann man die Parameter $dbpath und $db_id auch einfach wegfallen lassen. Dann wird die Datenbank einfach zur Klassendatei ins Verzeichnis gespeichert und alle Daten im selben Datensatz angelegt. Wenn man die Klasse nicht Projektübergreifend benutzt und nicht mehrere Dateninstanzen verwendet kann man das durchaus auch tun.
Reinwerfen kann man in die Klasse praktisch alles was sich auch serialisieren lässt. Also auch Arrays und Objekte (wenn __sleep und __wakeup definiert sind). Als Namen kann man alles verwenden was PHP auch als Variablennamen akzeptiert. Alle Zugriffe auf Werte des Objekts werden sofort in entsprechende Datenbankabfragen umgesetzt. Die Datenbank ist also immer Live und auf dem aktuellsten Stand.
Grade als Hinweis eingegangen:
Die Klasse funktioniert nicht direkt als Array. Auch wenn man Arrays darin speichern kann. Das direkt Zuweisen von Werten zu einem gespeicherten Array schlägt fehl. Der Wert wird nicht im Array gespeichert.
<?php
$ssc = new Bardiir_SimpleStorageClass();
$ssc->a = array(1,2,3);
// Funktioniert NICHT:
$ssc->a[5] = ‚bla‘;
// Funktioniert:
$a = $ssc->a;
$a[5] = ‚bla‘;
$ssc->a = $a;
?>
Absolute Mindestanforderung damit das ganze funktioniert ist PHP 5.0.0. Damit isset(), empty() und unset() funktionieren muss mindestens PHP 5.1.0 verfügbar sein.
Verbesserungsideen? Vorschläge? Bug gefunden? => Kommentar!
Download: http://www.megaupload.com/?f=KB1TMOWC
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.