【问题标题】:PDO SQLite3 connection failure when database is in different folder数据库位于不同文件夹时 PDO SQLite3 连接失败
【发布时间】:2012-09-04 05:08:33
【问题描述】:

我正在尝试从 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 库 3.7.4

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

问题解决了

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

应该是这样的:

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

原来 pdo_sqlite 不需要 'host='

【问题讨论】:

  • 当您使用正斜杠而不是 DIRECTORY_SEPERATOR 提供的 Win32 特定的反斜杠时会发生什么?
  • 将创建与 db 连接的 php 文件放在与 db 相同的文件夹中,然后只需要带有 require_once('abspath/connect.php') 的 php 文件,其中 abspath 是 connect.php 的绝对路径?
  • 你能fopen这个文件吗?
  • 另外,包含db文件的目录应该是可写的
  • if(fopen($file, 'r+')) 返回成功。 some_inner_folder 和两个 data.db 文件都可以完全控制所有用户,但这应该很重要,因为它是一个 Windows 框。

标签: php sqlite pdo


【解决方案1】:

当我们为 Drupal 7 编写数据库层时,我们发现 PDO 有很多错误模式,只有异常值得一提。 $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 这将使静默失败更加嘈杂。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多