使用Zend Framework的PHP无法启动SQLite数据库?

时间:2010-01-24 06:00:45

标签: php sqlite zend-framework

尝试使用简单的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);”,看起来不错。

但是我收到一条带有'SQLSTATE [HY000]消息的'Zend_Db_Statement_Exception':一般错误:14无法打开数据库文件'。我尝试取消“dbname”变量上的前导“./”,并确保PHP文件所在的文件夹具有对每个人的写入权限。我甚至尝试使用“touch test.sqlite3”创建文件,并确保每个人都可以写入。

这是使用PHP v5.2.10

1 个答案:

答案 0 :(得分:4)

您的代码在这里工作(在Windows上)。所以array("dbname" => "./test.sqlite3")语法不是问题。和其他人一样,我认为这是一个许可问题。

一些想法:

  • 如果你用php作为apache模块运行程序:如果从命令行运行它是否有效?创建的文件的权限是什么?相应地调整对apache用户的权限。
  • 如果以上工作:strace您的脚本(strace php test.php)并检查输出是否有权限错误。
  • 要创建./test.sqlite3的目录必须是运行php的用户可读写的。 足以具有可读写test.sqlite3,因为sqlite还会在此目录中读取和写入临时test.sqlite3-journal文件。确保它是。
  • 尝试使用数据库名称的绝对路径。
  • 确保已加载pdopdo_sqlite扩展名(检查phpinfo()的输出)。另外,看看系统和php捆绑的sqlite libs之间没有冲突。