【发布时间】: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 框。