Правильный путь sqlite / URI для php pdo на окнах

[ante-scriptum: это вопрос, ответ на который я сам ответил, вам не нужно беспокоиться)

Я столкнулся с странной конфигурационной проблемой, не документированной нигде на конкретной странице PHP.net или в StackOverflow.

Проблема

При открытии существующей базы данных sqlite в Windows эта ошибка повторяется:

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 при поиске в Google:

$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 :

Вы также можете использовать стиль пути linux для окон:

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

Лучше, чем PDO('sqlite:...') заключается в использовании расширения PHP sqlite3 и его класса SQLite3 . Я попробовал свои советы выше с базой данных на внешнем жестком диске, и он не работал (по-прежнему дает ту же ошибку, что упоминается в первом сообщении @ justin-t). Затем я попытался с классом SQLite3 и … Ура! Это сработало!

(Только для тех, кто интересуется PDO и множеством его странных ошибок).