Zend Framework ile PHP bir SQLite veritabanını açamazsınız?

1 Cevap php

SQLite databse oluşturmak ve işlemek için basit bir PHP / Zend Framework kurulum almak için çalışıyoruz.

<?php
require_once("Zend/Db.php"); // Zend framework
$db = Zend_Db::factory('Pdo_Sqlite', array("dbname" => "./test.sqlite3"));

$sql = "CREATE TABLE IF NOT EXISTS ".$db->quoteIdentifier("configs")." (".$db->quoteIdentifier("name")." TEXT NOT NULL PRIMARY KEY, ".$db->quoteIdentifier("value")." TEXT NOT NULL);";
echo $sql;
$db->query($sql);

SQL doğru görünüyor ki, "CREATE TABLE IF NOT EXISTS "configs" ("name" TEXT NOT NULL PRIMARY KEY, "value" TEXT NOT NULL);" olarak yankıları.

Ama mesajla ': Genel hata: veritabanı dosyası açılamıyor 14 sqlstate [HY000]' a 'Zend_Db_Statement_Exception' olsun. Ben "dbname" değişkeni üzerinde lider ". /" Kalktıktan denedim, ve PHP dosyası olduğunu klasör herkes için yazma izinlerine sahip olduğunu sağladık. Ben bile "touch test.sqlite3" ile dosya oluşturma çalıştı ve herkes tarafından yazılabilir sağlanmalıdır.

Bu PHP v5.2.10 kullanıyor

1 Cevap

kodunuzu (windows) burada çalışıyor. bu yüzden array("dbname" => "./test.sqlite3") sözdizimi sorun değildir. diğerleri gibi, ben bunu bir izin sorunu olduğunu varsayalım.

bazı fikirler:

  • Eğer apache modül olarak php ile programı çalıştırıyorsanız: komut satırından çalıştırırsanız çalışır? dosyanın hazırlandı izinler nelerdir? buna apache kullanıcı izinlerini ayarlayın.
  • Eğer yukarıdaki not iş yapar: izni hataları çıkışını strace script (strace php test.php) ve kontrol edin.
  • ./test.sqlite3 oluşturulacağı dizin çalıştıran kullanıcının php tarafından okunabilir ve yazılabilir olmalıdır. o not okunabilir ve yazılabilir test.sqlite3 olması için yeterli, sqlite da okur ve bu dizinde bir geçici test.sqlite3-journal dosyası yazar çünkü. emin olduğundan emin olun.
  • veritabanı adı için mutlak bir yol kullanmayı deneyin.
  • emin olun pdo ve pdo_sqlite uzantıları (phpinfo() çıkışını kontrol edin) yüklenir. Ayrıca, sistem ve php birlikte sqlite kütüphaneleri arasında bir çakışma olduğunu görüyoruz.