PHP с Zend Framework не может запустить базу данных SQLite? - PullRequest
2 голосов
/ 24 января 2010

Попытка получить простую установку PHP / Zend Framework для создания базы данных SQLite и манипулирования ею.

<?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 повторяется как "CREATE TABLE IF NOT EXISTS "configs" ("name" TEXT NOT NULL PRIMARY KEY, "value" TEXT NOT NULL);", что выглядит правильно.

Но я получаю «Zend_Db_Statement_Exception» с сообщением «SQLSTATE [HY000]: общая ошибка: 14 невозможно открыть файл базы данных». Я попытался снять начальную букву «./» с переменной «dbname» и убедился, что папка, в которой находится файл PHP, имеет права на запись для всех. Я даже попытался создать файл с "touch test.sqlite3" и убедился, что он доступен для записи всем.

Это использует PHP v5.2.10

1 Ответ

4 голосов
/ 24 января 2010

ваш код работает здесь (на окнах). поэтому синтаксис array("dbname" => "./test.sqlite3") не является проблемой. как и другие, я предполагаю, что это проблема разрешения.

некоторые идеи:

  • если вы запускаете программу с php в качестве модуля apache: работает ли она, если запускается из командной строки? Каковы права на файл создан? соответственно измените разрешения для пользователя apache.
  • если указано выше, не работает: strace ваш сценарий (strace php test.php) и проверяет вывод на наличие ошибок разрешения.
  • каталог, в котором должен быть создан ./test.sqlite3, должен быть доступен для чтения и записи пользователю php. недостаточно , чтобы иметь доступный для чтения и записи test.sqlite3, поскольку sqlite также читает и записывает временный файл test.sqlite3-journal в этом каталоге. убедитесь, что это так.
  • попробуйте использовать абсолютный путь для имени базы данных.
  • убедитесь, что расширения pdo и pdo_sqlite загружены (проверьте вывод phpinfo()). также обратите внимание, что между системой и библиотекой sqlite php нет конфликтов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...