sqlite正确的路径/URI为php pdo在windows上


sqlite correct path/URI for php pdo on windows

<script:这是一个自我回答的问题,你不需要费心回答]>

我遇到了一个奇怪的配置问题,没有在特定的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();
}
?>

我无法打开这个数据库,因为我已经尝试了各种各样的DSN,而谷歌:

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

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

解决方案

注意到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--

希望这将为您节省一些时间。

只是一个小追加到@justin answer:

你也可以在windows上使用linux的路径样式:

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

PDO('sqlite:...')更好的是使用PHP的sqlite3扩展及其SQLite3类。我已经在外部(硬盘)驱动器上尝试了您的建议,它没有工作(仍然给出与@justin-t在第一篇文章中提到的相同的错误)。然后我尝试了SQLite3类和…华友世纪!它工作!

(仅供那些对PDO及其许多奇怪的bug感到好奇的人使用)

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

我一直在努力解决类似的问题,却发现它拒绝了我的DSN,因为sqlite被禁用。