Suche nach als

SQLite:

Auf dieser Seite:

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&ouml;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&uuml;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&uuml;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&auml;chsten Zeile gehen
    
sqlite_next($result);

?>