代码之家  ›  专栏  ›  技术社区  ›  MidnightLightning

带Zend框架的PHP不能启动sqlite数据库?

  •  2
  • MidnightLightning  · 技术社区  · 15 年前

    尝试使用一个简单的php/zend框架设置来创建一个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 'WITH MESSAGE'sqlstate[hy000]:常规错误:14无法打开数据库文件'。我试过脱掉领头的“./”在 dbname “变量,并确保php文件所在的文件夹对所有人都具有写权限。我甚至尝试用“创建文件” touch test.sqlite3 “确保每个人都能写。

    这是使用php v5.2.10

    1 回复  |  直到 12 年前
        1
  •  4
  •   ax. Clement Herreman    15 年前

    您的代码在这里(在Windows上)工作。所以 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() )另外,请注意,系统和php绑定的sqlite libs之间没有冲突。