SQLite:
Datenbank ohne Datenbankserver
Die SQLite Datenbank eignet sich gut für kleinere Anwendungen mit weniger Datenvolumen und ohne gleichzeitigen Schreib-Zugriff, paralleles Lesen hingegen hat eine gute Performance. SQLite ist viel schneller als andere Datenbank Engines, sofern die Abfragen nicht zu komplex werden. Das Programmieren von SQLite unterscheidet sich wenig von dem anderer Datenbanken, bloss ist der Funktionsumfang der Query-Language geringer.
SQLite ist eine auf einer einzigen Datei basierende Datenbank, es gibt sie seit PHP 5.
In SQLite gibt es keinen Server Prozess, der zuerst gestartet oder konfiguriert werden müsste.
Es gibt auch keinen Administrator und Benutzerrechte, es gibt kein Benutzername und kein Passwort.
SQLite braucht "zero-configuration". Eine SQLite Datenbank kann ohne 'dump and restore' transportiert werden,
die Datei kann einfach per FTP auf den Server übertragen, auf einen USB-Stick kopiert oder per E-Mail verschickt werden.
In der SQLite-Datei, wenn sie per Texteditor geöffnet wird steht eine Zeile: ** This file contains an SQLite 2.1 database **
Mehr über SQLite (und Unterschiede zu MySQL) auf >> www.sqlite.org
SQLite kennt zwei Wege der Programmierung, den 'prozeduralen oder funktionalen' Weg (folgende Abschnitte) und den 'Objekt orientierten' Weg (am Ende der Seite).
Funktionsreferenz von SQLite auf >> http://php.net/manual/de/ref.sqlite.php
Datenbank anlegen
sqlite_open
Ein Datenbank- oder Tabellenname darf nicht mit sqlite_ beginnen, da die Methoden so beginnen.
Eine neue Datenbank lege ich an, indem ich versuche eine noch nicht existierende Datei zu öffnen,
sofern der Ordner existiert und Schreibrechte hat (CHMODE).
Der erste Parameter gibt den Pfad an, der zweite die Zugriffs-/Schreibrechte
mit der die Datenbank geöffnet wird, der dritte speichert die Fehlermeldung.
So erhalten ich den Datenbank-Handle ($db):
<?php
$db = sqlite_open("SQLite/db_test.db", 0666, $error)
or die("Fehler beim Eröffnen der Datenbank: $error");
?>
Tabelle erstellen
CREATE TABLE
sqlite_query
SQLite wird blockiert, wärend jemand hinein schreibt.
Meine Tabelle soll drei Kolonnen haben, die erste 'id' ist eine Zahl, die sich je gefüllte Zeile automatisch inkrementiert (hochrechnet). Die zweite und dritte heissen col_1 und col_2, gebe ich nichts an, dann ist der Feldtyp ein gemischter, und kann alles durcheinander aufnehmen.
<?php
$tabelle_erstellen = "CREATE TABLE tb_test (id INTEGER PRIMARY KEY, col_1, col_2)";
sqlite_query($db, $tabelle_erstellen);
?>
Zeilenweises eingeben
INSERT INTO VALUES
SQLite kann sich befüllen durch Einlesen von CSV Dateien oder natürlich auch mit Hilfe eines Formulars (siehe weitere Seiten). Der Befehl für eine Zeile ist wie MySQL. Ich liste die neuen Zellinhalte in der Reihenfolge der Kolonnen auf, in die erste schreibe ich NULL, id wird automatisch autoinkrementiert.
<?php
// Variablen vorbereiten
$col_1 = "Da komm ich her:";
$col_2 = "Aus dem Weltenmeer.";
$db = sqlite_open("db_test.db", 0666);
// Eingabe
$eingabe = "INSERT INTO tb_test VALUES (NULL, '$col_1', '$col_2')";
$doit = sqlite_query($db, $eingabe);
if (!$doit) {
echo "Fehler bei der Dateneingabe!"; // eine Fehlermeldung ist nicht immer erwünscht
}
sqlite_close($db); // Verbindung unterbrechen
?>
Mehrere Zeilen eingeben
BEGINN COMMIT
SQLite kann sich befüllen durch eine Sammel-Eingabe. Wenn ich angebe welche Kolonnen eingefüllt werden, kann ich die anderen ausser Acht lassen (hier id ohne NULL).
<?php
$db = sqlite_open("db_test.db", 0666);
// Zeilen sammeln
sqlite_query($db, "BEGIN");
sqlite_query($db, "INSERT INTO tb_test (col_1, col_2) VALUES ('Da komm ich her:','Aus dem Weltenmeer.')");
sqlite_query($db, "INSERT INTO tb_test (col_1, col_2) VALUES ('Da geh ich hin:','Als Schmetterling.')");
sqlite_query($db, "INSERT INTO tb_test (col_1, col_2) VALUES ('Da wünsch ich mir:','Ein Lied von dir.')");
sqlite_query($db, "INSERT INTO tb_test (col_1, col_2) VALUES ('Da blieb mir noch:','Ein Sommerloch.')");
// Sammlung abschicken
sqlite_query($db, "COMMIT");
sqlite_close($db); // Verbindung unterbrechen
?>
Falls die Tabelle noch nicht vorhanden ist, muss sie durch eine sqlite_query erstellt werden, gleich nach der BEGIN Zeile schiebe ich folgendes ein:
sqlite_query($db, "CREATE TABLE tb_test(id INTEGER PRIMARY KEY, col_1, col_2");
Falls die Tabelle schon vorhanden ist, wird diese Zeile die Tabelle nicht überschreiben, sondern einen Fehler auslösen.
Daten ausgeben
SELECT * FROM
sqlite_valid(), sqlite_current(), sqlite_next()
SQLite kann allerlei für Datenbankabfragen tätigen.
<?php
$db = sqlite_open("SQLite/db_test.db");
$result = sqlite_query($db, "SELECT * FROM tb_test");
// durch die gefundenen Zeilen iterieren
while (sqlite_valid($result)) {
// aktuelle Zeile durch current() auffangen
$row = sqlite_current($result);
print $row[1]." ".$row[2]."<br />"; // ausgeben
// zur nächsten Zeile gehen
sqlite_next($result);
}
?>