sqlite在Windows上为php pdo提供正确的路径/ URI

时间:2011-12-29 16:48:33

标签: php windows sqlite path pdo

[ante-scriptum:这是一个自我回答的问题,你不需要打扰回答]

我遇到了一个奇怪的配置问题,没有在specific PHP.net page或StackOverflow上的任何地方记录。

问题

在Windows上打开现有的sqlite数据库时,同样的错误仍然显示:

SQLSTATE[HY000] [14] Unable To Open Database File

虽然执行的代码是从手册中复制/粘贴的:

<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'sqlite:/full/path/to/db';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

?>

我无法打开这个数据库,因为我在谷歌搜索时尝试了各种各样的DSN:

$dsn = 'sqlite:/c:\\full\\path\\to\\db'; // --FAILED--

$dsn = 'sqlite://c:/full/path/to/db'; // --FAILED--

4 个答案:

答案 0 :(得分:22)

解决方案

请注意DSN sqlite:/中的简单斜杠?放下它吧!

像这样写你的DSN:

sqlite:name.db

这适用于相对绝对路径,因此:

$dsn = 'sqlite:c:\full\path\to\name.db'; // --WORKS--

$dsn = 'sqlite:..\data\name.db'; // --WORKS--

$dsn = 'sqlite:name.db'; // --WORKS--

希望将来能为您节省一些时间!

答案 1 :(得分:2)

@justin答案只是一小部分:

您还可以在Windows上使用linux路径样式:

$dsn = 'sqlite:c:/full/path/to/name.db';

答案 2 :(得分:0)

优于PDO('sqlite:...')是使用PHP sqlite3扩展名及其SQLite3类。我已经在外部(硬)驱动器上使用数据库尝试了您的建议,但它不起作用(仍然提供与@ justin-t在第一篇文章中提到的相同的错误)。然后我尝试了SQLite3课程并且...... Hurray!它奏效了!

(仅针对那些对PDO及其许多奇怪错误感到疑惑的人。)

答案 3 :(得分:0)

检查您的PHP安装是否已启用sqlite和/或sqlite3的扩展。

我一直在努力解决类似的问题,只是发现它由于禁用了sqlite而拒绝了我的DSN。