[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 и множеством его странных ошибок).