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ö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);

?>
Da komm ich her: Aus dem Weltenmeer.
Da geh ich hin: Als Schmetterling.
Da wünsch ich mir: Ein Blümelein von dir.
Da blieb mir noch: Ein Sommerloch.

Daten ändern

UPDATE WHERE

Ich kann Daten verändern:

<?php
  $db 
sqlite_open('SQLite/db_test.db');
  
sqlite_query($db"UPDATE tb_test SET col_2='Ein Licht von dir.' WHERE col_2='Ein Lied von dir.'");
  
sqlite_close($db);
?>

Datensatz löschen

DELETE FROM WHERE

Ich kann Datensätze löschen.

<?php
  $db 
sqlite_open('SQLite/db_test.db');
  
sqlite_query($db"DELETE FROM tb_test WHERE id > 4");
  
sqlite_close($db);
?>
Das ist der Grund, warum auf dieser Seite nach einem Reload (Aktualisieren) nicht mehr als 4 Datensätze angezeigt werden, egal wieviel ich auf der nächsten Seite durch das Formular hinzugefügt habe.

Sicherung und Sicherheit

Objekt orientiertes Programmieren

Der Objektorientierte Weg geht so: Ich nehme den Datenbank-Handle aus der Parameterklammer heraus und schreibe ihn mit einem Pfeil vor query und lasse das sqlite_ weg.
Aus sqlite_query($db, $Datenbankabfrage); wird $db->query($Datenbankabfrage);

new SQLiteDatabase

<?php
// Datenbank anlegen
  
$db = new SQLiteDatabase("SQLite/db_test.db"0666$error)
    or die(
"Fehlermeldung: $error");
    
// Tabelle erstellen
  
$tabelle_erstellen "CREATE TABLE tb_test (id INTEGER PRIMARY KEY, title, inhalt)";
  
$db->query($tabelle_erstellen);
  
// Variablen vorbereiten
  
$col_1 "Da komm ich her:";
  
$col_2 "Aus dem Weltenmeer.";
// Daten eingeben
  
$eingabe "INSERT INTO tb_test VALUES (NULL, '$col_1', '$col_2')";
  
$doit $db->query($eingabe);
  if (!
$doit) { 
    echo 
"Fehler bei Dateneingabe: $error";
  }
  
$db->close(); // Verbindung unterbrechen
  # unset($db); // geht auch aber beide sind einfach unnötig
// Daten ausgeben
  
$db = new SQLiteDatabase("SQLite/db_test.db"0666$error)
    or die(
"Fehlermeldung: $error");
  
$result $db->query("SELECT * FROM tb_test");
// durch die gefundenen Zeilen iterieren
  
while ($result->valid()) {
// aktuelle Zeile durch current() auffangen
    
$row $result->current();     
    
print_r($row); // ausgeben
// zur nächsten Zeile gehen
    
$result->next();
  } 
?>


Valid XHTML 1.0 Check den Code.

SQLite CSV >> << Tabelle ausgeben
Ich bin hier: > PHP Lehrling >> SQLite:
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 30.01.2010