2014-12-26 2 views
2

Я развертывание проекта Laravel на виртуальный хостинг и добавил php.ini с:Laravel: Подключение к базе данных SQLite кидает «PDOException: Не удалось найти драйвера»

extension=pdo.so 
extension=pdo_sqlite.so 
extension=sqlite.so 

В phpinfo, я также мог видеть что загружаются расширения sqlite. Тестирование подключения к базе данных со следующими фрагментами кода, также работали:

<?php 
try { 
    $dbh = new PDO("sqlite:app/database/production.sqlite"); 
    echo "Connected to database!"; 
} 
catch(PDOException $e) 
{ 
    echo $e->getMessage(); 
} 

Однако при попытке подключиться к Databse, используя Laravel, приложение выдает мне ошибку PDOException.

Цените любую помощь по этому вопросу. Заранее спасибо!

+1

Вы сделали шаги из [Как определить, включен ли PDO в PHP?] (Http://stackoverflow.com/q/6113262/367456) - Особенно в этом anser: http://stackoverflow.com/ а/6113496/367456. Если нет, сделайте это. Затем или, если да, укажите результаты в своем вопросе. Это важно для понимания того, что отличает ваш вопрос от существующих от sqlite и с тем же сообщением об ошибке. – hakre

+0

Использование extension_loaded ('pdo') и extension_loaded ('pdo_sqlite') вернули true. Есть ли другое место, которое я мог бы проверить? Кажется, что только приложение laravel жалуется на то, что не найдет водителя. – Terry

+0

Эти результаты выглядят многообещающими, драйверы загружены. Следующая точка, которую я проверил бы, это если файл sqlite-database-file можно найти. Пожалуйста, укажите абсолютный путь 'app/database/production.sqlite' из корневого каталога, начиная с'/'. – hakre

ответ

2

Исключение вы получаете:

PDOException: Не удалось найти драйвер

дается PDO PHP всякий раз, когда драйвер для вашей базы данных не может быть найден. PDO нужен драйвер для работы с различными базами данных (например, Sqlite, Mysql, ...). И PDO ищет драйвер, основанный на DSN. В вашем случае DSN является:

sqlite:app/database/production.sqlite 

И для водителя смотрится только в той части, до первого двоеточия («:»):

sqlite 

Строка sqlite используется, чтобы найти sqlite3 водитель (см. PDO_SQLITE DSN in the PHP manual).

Существует только одно место во всех PDO, где выбрано это исключение (php 5.4 lxr), и его бросают только в случае текста перед двоеточием в DSN. Драйвер не найден. Это также можно ожидать от сообщения об ошибке.

Как вы уже сделали проверки, указанные в the best answer to "How to determine if PDO is enabled in PHP", вы уже уверены, что был добавлен расширение PDO sqlite .

Просто, чтобы сделать это ясно: расширение PHP, который содержит драйвер PDO для SQLite называется pdo_sqlite, которые вы проверили, чтобы быть загружен.

Единственное объяснение, которое я есть то, что вы сделали загрузить расширение но PHP не смог загрузить драйвер .По данным источников PHP (php 5.4 lxr), это может иметь ровно две причины:

  1. драйвер PDO требует другой версии API PDO
  2. PDO должен быть загружен перед загрузкой любого драйвера PDO

(технически есть является третьей причиной, но ее следует игнорировать: добавление драйвера в хэш-таблицу драйверов PDO не удалось, это довольно внутреннее и не имеет ничего общего с PDO)

Поскольку расширение загружено, но драйвер не является Я подозреваю, что возникла проблема с регистрацией драйвера PDO. Вы должны проверить журнал ошибок PHP для ошибок при запуске. Как вы говорите, у вас есть эта проблема на общем хостере, вам нужно обратиться в службу поддержки, где находится журнал ошибок PHP. Вы ищете ошибки при запуске. Иногда эти ошибки также отображаются в журнале ошибок веб-сервера в зависимости от того, какой интерфейс PHP SAPI используется.

Просьба также предоставить информацию от phpinfo(), чтобы можно было дать дополнительные указания. С предоставленной информацией вы можете быть уверены, что драйвер sqlite для PDO не был загружен. Это проблема конфигурации.

+0

В команде configure есть «-with-pdo-sqlite = shared» и «--with-sqlite = shared». Кроме того, phpinfo() показывает, что драйверы PDO для sqlite включены, а библиотека SQLite указана как 3.7.7.1 Я попытаюсь посмотреть, могу ли я получить доступ к журналу ошибок PHP. – Terry

+1

Высокотехнологичная поддержка для общего хостинга включала в себя php.ini по умолчанию и раскомментировала строки, которые я включил в свой первый пост, и страница загружается в порядке. Я не уверен, что было сделано, но я сохраню этот файл ini для дальнейшего использования. – Terry

+0

Расширения, скорее всего, настроены на самом сервере. Вам не нужно загружать расширение в свой собственный php.ini. Обратитесь к документации хостеров PHP о том, как настроить расширения и какие расширения доступны по умолчанию для получения дополнительной информации.- Тем не менее я не понимаю, как это предотвратило обнаружение драйвера. Возможно, водитель загрузился дважды? – hakre

Смежные вопросы