当数据库位于不同的文件夹中时,PDO SQLite3连接失败

时间:2011-05-11 03:24:42

标签: php sqlite pdo

我正在尝试从php连接到sqlite3数据库,但是当我想将数据库放在方便且位于Web可访问空间之外的某个地方时,我正在打砖墙。当db文件与我的php脚本位于同一个文件夹中时,它运行正常,但是当我将它放在其他地方时 - 无声失败。

我写了一个简单的检查器,这样可以更容易理解我的意思

<?php
$files = array(
   'data.db',
    getcwd() . DIRECTORY_SEPARATOR . 'data.db',
   'some_inner_folder' . DIRECTORY_SEPARATOR . 'data.db',
    getcwd() . DIRECTORY_SEPARATOR . 'some_inner_folder' . DIRECTORY_SEPARATOR . 'data.db'
);

foreach($files as $file) {
    if(file_exists($file))
        echo $file, ' found<br/>';
    else
        echo $file, ' not found!<br/>';
    try {
        $db = new PDO('sqlite:host=' . $file);
        if($db)
            echo 'connection to ', $file, ' made succesfully<br/>';
    } catch (PDOException $error) {
        echo 'error connecting to ', $file, ' error message: ', $error->getMessage(), '<br/>';
    }
    $db = null;
}

输出结果是:

data.db found
connection to data.db made succesfully
C:\Web\data.db found
error connecting to C:\Web\data.db error message: SQLSTATE[HY000] [14] unable to open database file
some_inner_folder\data.db found
error connecting to some_inner_folder\data.db error message: SQLSTATE[HY000] [14] unable to open database file
C:\Web\some_inner_folder\data.db found
error connecting to C:\Web\some_inner_folder\data.db error message: SQLSTATE[HY000] [14] unable to open database file

C:\ Web \ data.db和C:\ Web \ some_inner_folder \ data.db具有相同的内容(文件复制和粘贴)

PHP版本5.3.6,Windows 7 x64

PDO驱动程序mysql,sqlite,sqlite2

SQLite Library 3.7.4

我真的不明白为什么它不起作用。

问题解决了

$db = new PDO('sqlite:host=' . $file);

应如下所示:

$db = new PDO('sqlite:' . $file);

原来pdo_sqlite不需要'host ='

2 个答案:

答案 0 :(得分:0)

当我们为Drupal 7编写数据库层时,我们发现PDO有很多错误模式,只有例外是值得的。 $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;这会使沉默失败更加嘈杂。

答案 1 :(得分:0)

您是否在其他文件夹上存在权限问题。它必须能够创建和写入文件(即您必须能够写入目录和文件)。