(PHP 5, PECL sqlite >= 1.0.0)
sqlite_open — Öffnet eine SQLite-Datenbank und erzeugt die Datenbank, wenn diese nicht existiert.
Objektorientierter Stil (constructor):
Öffnet eine SQLite-Datenbank. Wenn die Datenbank nicht existiert, wird sie erzeugt.
Dateiname der SQLite-Datenbank. Es handelt sich dabei entweder um einen relativen, oder einen absoluten Pfad zu der Datei, in der SQLite die Daten speichern wird. Wenn die Datei noch nicht existiert, wird SQlite versuchen, sie zu erzeugen. Sie MÜSSEN Schreibrechte auf die Datei haben, wenn Sie Daten in die Datenbank eintragen oder die Datenbank ändern wollen.
Modus der Datei. Dieser sollte genutzt werden, wenn die Datenbank nur Lesezugriff erlauben soll. Zur Zeit wird dieser Parameter von der SQLite-Bibliothek ignoriert. Der Standardwert für Modus ist der oktale Wert 0666. Es handelt sich dabei um den empfohlenen Wert, wenn der Parameter error_message genutzt werden soll.
Wird als Referenz übergeben und wird im Fehlerfall eine aussagekräftige Fehlermeldung enthalten. Diese wird erklären, warum die Datenbank nicht geöffnet werden konnte.
Liefert eine Ressource (Datenbankverbindung) nach erfolgreichem Verbindungsaufbau. Ist ein Fehler aufgetreten wird FALSE zurückgegeben.
Beispiel #1 sqlite_open()-Beispiel
<?php
if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {
sqlite_query($db, 'CREATE TABLE foo (bar varchar(10))');
sqlite_query($db, "INSERT INTO foo VALUES ('fnord')");
$result = sqlite_query($db, 'select bar from foo');
var_dump(sqlite_fetch_array($result));
} else {
die($sqliteerror);
}
?>
In Unix-Umgebungen reagiert SQLite auf Skripte, die den Systembefehl fork() nutzen. Sollten Sie ein solches Skript einsetzen, ist es ratsam bestehende Datenbankverbindungen zu beenden, anschließend den Fork ausführen, um dann die Verbindung entweder in einem Kind- oder dem Eltern-Prozess wieder herzustellen. Mehr Informationen zu diesem Thema finden Sie unter » Die C Sprachenschnittstelle zur SQLite-Bibliothek in dem Kapitel names Multi-Threading And SQLite.
Es ist nicht empfehlenswert mit SQLite-Datenbanken zu arbeiten, die auf einer via NFS verbundenen Partition gespeichert sind. NFS neigt notorisch zu einem unvorhersehbarem Verhalten, wenn Dateien exklusiv gegen den Zugriff durch Dritte gesperrt werden. Dabei kann es sein, dass entweder eine Datenbankverbindung gar nicht zustande kommt, oder das Sperrverhalten undefiniert ist.
Hinweis: Seit der SQLite-Bibliothek in der Version 2.8.2, ist es möglich :memory: als filename anzugeben. Die erzeugte Datenbank wird dann ausschließlich im Speicher des Computers erzeugt und verwaltet. Dies ist nützlich bei der temporären Datenverarbeitung, da die Datenbank mit Prozessende zerstört wird. Eine solche Datenbank ist ebenfals nützlich, wenn sie in Verbindung mit dem ATTACH DATABASE SQL-Befehl andere Datenbanken einbindet, um Daten zwischen diesen auszutauschen und abzufragen.
Hinweis: SQLite berücksichtigt Safe Mode und open_basedir.
I found that both the file and the directory it is in have to be writeable by the web server, or an ambiguous "unable to open database file" error appears (pecl 1.0.3). I pulled my hair out for ages before I realised that.
If you miss to set the permissions mentioned by ivoras Sqlite will drop an error message saying "Malformed database scheme", which is somehow misleading.
(I mentioned this as some [I did] might search php.net for this error message)
the above example dows not! work since sqlite_query() does not accept one argument, but only 2.
so correct is:
<?php
if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {
sqlite_query($db,'CREATE TABLE foo (bar varchar(10))');
sqlite_query($db,"INSERT INTO foo VALUES ('fnord')");
$result = sqlite_query($db,'select bar from foo');
var_dump(sqlite_fetch_array($result));
} else {
die ($sqliteerror);
}
?>
Since sqlite uses a journal to do updates and inserts (and creates it on the fly), you ALSO must have write permissions set for the web server to write in the same DIRECTORY as the database file.