sql的正确path/ URI的PHP在Windows上的pdo

[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和它的许多奇怪错误的人)。