sprachkonstrukt.de

SQLite: Die Datenbank ohne Server

Mini-Tutorial zur Ein-Datei-Datenbank.

Der wohl am meisten genutzte Technologiemix, um dynamische Websiten zu machen, ist die bewährte HTML-CSS-PHP-MySQL-Geschichte. Das dürfte vor allem daran liegen, dass PHP eine relativ „einfache“ Programmiersprache ist und – meist auch gleich zusammen mit MySQL – auf fast jedem Webspace vorinstalliert ist.
Dabei ist ein MySQL-Server, auf dem nur eine Datenbank mit ein paar Tabellen für eine kleine Website läuft, oftmals übertrieben. Denn seit PHP 5 ist SQLite implementiert.

SQLite ist eine Datenbank, die ohne Datenbankserver läuft – praktisch nur im Datenbanktreiber der jeweiligen Programmiersprache. Gespeichert wird sie komplett in einer einzigen Datei. Anstatt also einen Datenbankserver mit Nutzerverwaltung etc. aufzusetzen, genügt es, in unser Programm oder unser PHP-Script eine kleine Datei einzuwerfen, in der die Datenbankdaten gespeichert sind.
Die Grenzen von SQLite sind bei der Nebenläufigkeit (nur ein Prozess kann auf die Datenbank zugreifen) und bei der Rechteverwaltung (es gelten die Rechte des Dateisystems). Für große Systeme ist SQLite also ungeeignet. Um aber einfach ein paar Daten abzulegen, genügt es völlig. Der SQL-92-Standard wird sonst fast komplett unterstützt, auch „advanced“ Features wie Subqueries, Views, Trigger etc.

Angelegt wird eine SQLite-Datei am besten über die Kommandozeile:

sqlite3 db.sqlite

Der Dateiname ist dabei, genau wie die Endung, egal.
Anschließend können ganz normale SQL-Queries abgesetzt werden.
Nehmen wir an, wir erstellen eine Tabelle ‚test‘ mit einem ’name‘-Feld:

sqlite> CREATE TABLE test (name varchar(255));
sqlite> INSERT INTO test VALUES ('My Name');

Ein einfaches PHP5-Script sähe dann z.B. so aus:

try {
	$db = new PDO("sqlite:db.sqlite");
} catch(PDOException $e) {
	die($e->getMessage());
}

$sql = 'SELECT * FROM test';

try {
	foreach ($db->query($sql) as $row) {
		echo 'Name: '.$row['name'].'<br />';
	}
} catch(PDOException $e) {
	die($e->getMessage());
}

(Das Beispiel basiert grob auf http://www.lowter.com/article/php-sqlite-quickstart-guide, nutzt im Gegensatz dazu allerdings SQLite 3 und die PDO-Schnittstelle. Achtung: für kompliziertere Queries als im Beispiel sollte man natürlich Prepared Statements verwenden. Außerdem sollte die Datenbankdatei möglichst nicht in einem per www zugänglichen Ordner liegen.)