sqlite правильный путь / URI для php pdo на windows - PullRequest
12 голосов
/ 29 декабря 2011

[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();
}

?>

Я не мог открыть эту базу данных, поскольку во время поиска в Google пробовал все виды различных DSN:

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

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

Ответы [ 4 ]

22 голосов
/ 30 декабря 2011

Раствор

Обратите внимание на простой слеш в 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--

Надеюсь, это сэкономит вам время в будущем!

2 голосов
/ 10 мая 2015

Небольшое добавление к @ Джастину ответ:

Вы также можете использовать стиль пути Linux в Windows:

$dsn = 'sqlite:c:/full/path/to/name.db';
0 голосов
/ 04 ноября 2018

Проверьте, включены ли в вашей установке PHP расширения для sqlite и / или sqlite3.

Я боролся с подобной проблемой, но обнаружил, что он отклонил мой DSN, потому что sqlite был отключен.

0 голосов
/ 10 июля 2015

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...