[ante-scriptum:这是一个自我回答的问题,你不需要麻烦回答]
我遇到了一个奇怪的configuration问题,没有logging在特定的PHP.net页面或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(); } ?>
我无法打开这个数据库,因为我在Google上search了各种各样的DSN:
$dsn = 'sqlite:/c:\\full\\path\\to\\db'; // --FAILED--
$dsn = 'sqlite://c:/full/path/to/db'; // --FAILED--
注意DSN sqlite:/
的简单斜杠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--
希望将来能为您节省一些时间!
只是@justin的一个小附加答案:
您也可以在Windows上使用linux路径样式:
$dsn = 'sqlite:c:/full/path/to/name.db';
比PDO('sqlite:...')
更好的是使用PHP sqlite3
扩展和它的SQLite3
类。 我已经尝试过在外部(硬盘)驱动器上的数据库上面的建议,它没有工作(仍给出了同样的错误在第一篇文章中提到的@ justin-t)。 然后我尝试了SQLite3
类和…好玩! 有效!
(只为那些想知道PDO和它的许多奇怪错误的人)。