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.
sqlite_open
(PHP 5, PECL sqlite >= 1.0.0)
sqlite_open — Bir SQLite veritabanı için bir tanıtıcı açar, veritabanı mevcut değilse oluşturur
Açıklama
Nesne yönelimli kullanım (kurucu):
Bir SQLite veritabanı dosya sı için bir tanıtıcı açar, veritabanı mevcut değilse oluşturur.
Değiştirgeler
- dosya
-
SQLite veritabanı dosyasının ismi. Böyle bir dosya yoksa SQLite oluşturmaya çalışır. Dosyaya veri yazılacaksa, veritabanı şeması değiştirilecekse veya mevcut olmayan veritabanı oluşturulacaksa PHP'nin dosya yazma izninin olması gerekir.
- kip
-
Dosyaya erişim kipi. Hali hazırda bu değiştirge SQLite kütüphanesi tarafından yok sayılmaktadır. 0666 sekizlik değeri öntanımlı olup önerilen değerdir.
- hata_iletisi
-
Bir hata oluştuğunda veritabanının açılamama sebebini açıklayan ileti bu değiştirgeye konur.
Dönen Değerler
Bir hata durumunda FALSE yoksa bir özkaynak (veritabanı tanıtıcısı) döner.
Örnekler
Örnek 1 - sqlite_open() örneği
<?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);
}
?>
Notlar
Unix platformlarında, SQLite fork() sistem çağrısını kullanan betiklere duyarlıdır. Böyle bir betiğiniz varsa çatallama öncesi tanıtıcıyı kapatıp çocuk ve ebeveyn süreçte yeniden açmanız önerilir. bu konuda daha ayrıntılı bilgi edinmek için » SQLite kütüphanesinin C dili arayüzü belgesinin Multi-Threading And SQLite (Çok Evrelilik ve SQLite) bölümüne bakınız.
NFS bölümlerinde bulunan SQLite veritabanları ile çalışmanız önerilmez. NFS kilitlenmesi ile ünlü olduğundan kendinizi veritabanına erişemez durumda bulabilirsiniz. Dosya erişilebilir olsa bile kilitlenme davranışının bir açıklaması olmayabilir.
Bilginize: SQLite kütüphanesinin 2.8.2 sürümünden itibaren, bilgisayarın sadece belleğinde varolabilen bir veritabanı oluşturmak için dosya değiştirgesinde :memory: dizgesini belirtebilirsiniz. Süreç sonlandığında bellekteki veritabanı yok edildiğinden geçici işlemler için oldukça yararlıdır. Ayrıca, başka veritabanlarını yüklemek ve bunlar arasında veri hareketleri ve sorguları yapmak için ATTACH DATABASE SQL deyiminin kullanıldığı durumlarda da yararlıdır.
Bilginize: SQLite
safe_modeve open_basedir'a duyarlıdır.
Ayrıca Bakınız
- sqlite_popen() - Bir SQLite veritabanı için kalıcı bir tanıtıcı açar, veritabanı mevcut değilse oluşturur
- sqlite_close() - Açık bir SQLite veritabanını kapatır
- sqlite_factory() - Bir SQLite veritabanı açıp bir SQLiteDatabase nesnesi döndürür
sqlite_open
07-Dec-2007 02:46
02-Mar-2007 02:52
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);
}
?>
26-May-2004 05:46
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.
