2010-01-24 23 views
2

试图获得一个简单的PHP/Zend Framework安装程序来创建SQLite数据库并对其进行操作。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

+0

你可以发布'Zend_Db :: factory()'方法的源代码吗? –

+0

@Alix它的在线http://framework.zend.com/code/browse/Zend_Framework/standard/trunk/library/Zend/Db.php?r=trunk – MidnightLightning

回答

4

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

一些想法:

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

谢谢斧,我没有意识到SQLite需要一个临时日记文件。事实证明,我没有正确设置文件夹的权限,以使每个人都可以写信给它,一旦我解决了这个问题,一切都很棒! – MidnightLightning

+0

赞助LAWDZ。我一直试图找出几乎3个小时,为什么我的应用程序没有写入sqlite数据库。就像你说的,我必须在.sqlite文件及其目录上设置权限。谢谢,斧头。 –

+0

在我的情况下,为了工作,我只是将权限(w/r)设置为.db文件以及数据库文件夹。 –