Laravel: Ошибка [PDOException]: не удалось найти драйвер в PostgreSQL

53

Я пытаюсь подключиться к базе данных PostgreSQL через Laravel, чтобы выполнить миграцию php-artisan, но не кажется, что она направлена, так как она считывает имя базы данных MySQL.

Вот команды из базы данных .php:

'connections' => array(

    'sqlite' => array(
        'driver'   => 'sqlite',
        'database' => __DIR__.'/../database/production.sqlite',
        'prefix'   => '',
    ),

    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'database',
        'username'  => 'root',
        'password'  => '',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

    'pgsql' => array(
        'driver'   => 'pgsql',
        'host'     => 'localhost',
        'database' => 'postgres',
        'username' => 'postgres',
        'password' => 'root',
        'charset'  => 'utf8',
        'prefix'   => '',
        'schema'   => 'public',
    ),

    'sqlsrv' => array(
        'driver'   => 'sqlsrv',
        'host'     => 'localhost',
        'database' => 'database',
        'username' => 'root',
        'password' => '',
        'prefix'   => '',
    ),

),

Если я удалю пути MySQL, я получу:

[InvalidArgumentException]
Database [mysql] not configured.


EDIT: При попытке выполнить миграцию php artisan я получаю "PDOException: не могу найти драйвер". Я использую WAMP, и я в Win8.1. Использование PostgreSQL в качестве базы данных.


EDIT: Экспериментировали ряд альтернативных решений, но я все равно должен решить эту проблему. Файл php.ini был отмечен в Apache, WAMP (из папки php) и PostgreSQL. extension_dir правильный, поскольку он → extension_dir = "c:/wamp/bin/php/php5.5.12/ext/"

extension=pdo_pgsql.dll и extension=pgsql.dll раскоментированы.

Сработал трюк PATH в "Системных переменных" и перезагрузился. Без шансов.

Спасибо за помощь до сих пор.

Это мои драйверы php_pdo_driver.h и php_pdo.h из C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\php\SDK\include\ext\pdo

Информация из phpinfo:

Версия PHP 5.5.12

Компилятор MSVC11 (Visual С++ 2012) Настройка команды cscript/nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-PDO-OCI = C:\PHP-SDK\оракула\x64\instantclient10\SDK, общий" "--with-OCI8 = C:\PHP-SDK\оракула\x64\instantclient10\SDK, общий" "--with-oci8-11g = C:\PHP-SDK\оракула\x64\instantclient11\SDK, общий" "--enable-object-out-dir =../obj/" "--enable-com-dotnet = shared" "--with-mcrypt = static" "--disable-static-analysis" "--with-pgo"

  • 0
    Если база данных - это имя вашей базы данных, то вы используете зарезервированное слово в качестве имени базы данных.
  • 1
    Имя моей базы данных PostgreSQL - postgres, как указано в коде ^
Показать ещё 2 комментария
Теги:
database
syntax-error

18 ответов

55
Лучший ответ

Обязательно настройте ключ 'default' в app/config/database.php

Для postgres это будет 'default' => 'postgres',

Если вы получаете ошибку [PDOException] could not find driver, проверьте, установлены ли правильные расширения PHP. Вам необходимо установить pdo_pgsql.so и pgsql.so. Инструкции о том, как это сделать, различаются между операционными системами.

Для Windows расширения pgsql должны быть предварительно загружены с официальным распределением PHP. Просто отредактируйте свой php.ini и раскомментируйте строки extension=pdo_pgsql.so и extension=pgsql.so

Кроме того, в php.ini убедитесь, что extension_dir установлен в соответствующий каталог. Это должна быть папка с именем extensions или ext или аналогичная в вашем установочном каталоге PHP.

Наконец, скопируйте libpq.dll из C:\wamp\bin\php\php5.*\ в C:\wamp\bin\apache*\bin и перезапустите все службы через интерфейс WampServer.

Если вы все еще получаете исключение, вам может потребоваться добавить каталог postgres \bin в ваш PATH:

  • Свойства системы → вкладка "Дополнительно" → переменные среды
  • В группе "Системные переменные" в нижней половине окна прокрутите страницу и найдите запись PATH.
  • Выберите его и нажмите "Изменить"
  • В конце существующей записи поместите полный путь в ваш каталог bin postgres. Папка bin должна быть расположена в корневой папке вашего каталога установки postgres.
  • Перезапустите все открытые командные строки или, вернее, перезапустите компьютер.

Это, надеюсь, решит любые проблемы. Для получения дополнительной информации см.:

  • 0
    Большое спасибо за Вашу помощь. Пожалуйста, проверьте часть редактирования в моем сообщении. Кстати, путь к базе данных по умолчанию был моей первой проблемой, о которой уже позаботились, проблема с драйвером PDO возникла сразу после этого.
  • 0
    Файлы DLL существуют в папке расширений, верно? Кроме того, попробуйте раскомментировать другую DLL: extension=php_pdo.dll Это основной драйвер PDO, на котором основаны конкретные базы данных.
Показать ещё 14 комментариев
44

Для PDOException: could not find driver для MySQL, и если это ОС на основе Debian,

sudo apt-get -y install php5-mysql
  • 5
    И если вы используете PostgreSQL в современной ОС на базе Debian, это sudo apt-get -y install php7.0-pgsql .
19

Для PHP 7 в Ubuntu вы также можете:

sudo apt-get install php7.0-pgsql

Итак, теперь вы не можете раскомментировать строки в php.ini

UPD: У меня такая же ошибка, поэтому проблема не в драйвере. Я изменил свой database.ini, но каждый раз, когда я видел ошибку. И я изменяю конфигурацию базы данных в .env, и ошибки ушли.

  • 0
    Это было единственное, что работало для меня в Ubuntu (пробовал раскомментировать строки в php.ini безрезультатно)
  • 2
    Решено с этим, в моем случае используйте sudo apt-get install php7.1-pgsql
7

Я понимаю, что это старый вопрос, но я нашел его в поиске Google, поэтому я собираюсь идти дальше и отвечать на случай, если кто-то еще столкнется с этим. Я нахожусь на Mac и имею ту же проблему, но решил ее, используя HomeBrew. После того, как вы его установили, вы можете просто запустить эту команду:

brew install php56-pdo-pgsql

И замените 56 любой версией PHP, которую вы используете, без десятичной точки.

6

Это сработало для меня:

$ sudo apt-get install php-gd php-mysql

  • 1
    О, чувак, мне повезло прочитать это. Ты настоящий друг.
4

У меня была такая же проблема. Это то, что сработало для меня.

Есть 2 файла php.ini:

  • C:\WAMP\Bin\Apache\apache2.4.9\Bin
  • C:\WAMP\Bin\PHP\php5.5.12

ПРИМЕЧАНИЕ. Это использует мою версию PHP и Apache, изменяя их.

Файл php.ini, расположенный в обеих папках, - это то, что вам нужно обновить, расширения:

  • расширение = php_pdo_pgsql.dll
  • расширение = php_pgsql.dll

Это то, что вам нужно раскомментировать (удалить символ;).

Перезапустите Wamp и командную строку.

Надеюсь, это сработает для вас:).

2
sudo apt-get install php7.1-pgsql
0

У меня тоже есть эта проблема. Я уже решил эту проблему. Если вы используете Wamp, выполните следующие действия.

  1. Зайдите на wamp64/www/bin/php/php* (где * - это версия php, которую вы используете)
  2. Отредактируйте файл php и раскомментируйте эту строку, удалив точку с запятой:
;extension=pdo_pgsql to extension=pdo_pgsql
  1. Сохраните и перезапустите сервер Wamp

Если это не работает, пожалуйста, проверьте .env и config/database снова.

  • 0
    Этот решил мою проблему!
0

На ПК с Windows 8 с Laragon 3.4.0 180809 я столкнулся с той же проблемой. Это произошло в моем случае, потому что я обновил Laragon и добавил новую версию PHP. Так что в laragon/bin/php/ меня действительно было две директории:

  • php-7.1.20-Win32-VC14-x64
  • php-7.1.7-Win32-VC14-x64

Я добавил 7.1.20 в мою PATH. Но в моей командной консоли запуск php --ini показал, что путь фактически выбирается из более старого: php-7.1.7-Win32-VC14-x64. Поэтому я удалил старый (для безопасности я положил его в корзину). Но Ларагон не смог начать после этого.

Итак, в laragaon/etc/apache2/mod_php.conf я изменил путь к последней версии PHP. Затем перезапустил Laragon и проблема решена.

Ссылка: Как добавить еще одну версию PHP - Laragon Forum

0

Решено через 3 часа... Я использую WAMP (PHP 7.2.4), PostgreSQL 10, Laravel 5.6.29. Загрузив PHP-расширения (pgsql, pdo_pgsql) из Wampserver 3.3, я смог подключиться к серверу PostgreSQL с помощью простого тестового кода php из каталога www. Но $ php artisan migrate все еще вернулся

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

Я проверил оболочку (git bash для Windows) с помощью $ php --ini, который возвратил C:\wamp64\bin\php\php7.2.4\php.ini вместо c:\wamp64\bin\apache\apache2.4.33\bin\php.ini, загруженный WAMP Так что вам нужно раскомментировать расширения pgsql и pdo_pgsql также в C:\wamp64\bin\php\php7.2.4\php.ini, а затем выполнить миграцию будет работать...

0

Я был на общем хостинге и там мне пришлось включить все pdo

Изображение 3569

0

Я вижу, что вы используете Windows. Я не смог исправить это, включив любое из расширений, поставляемых с моим сервером Windows WAMP. Я попробовал PDO_ODBC и другие и даже нашел официальный Microsoft PDO_SQLSRV.

Решением для меня было установить драйверы PDO_SQLSRV со стороннего сайта. Я нашел драйверы через http://robsphp.blogspot.nl/2012/06/unofficial-microsoft-sql-server-driver.html

Я обычно не использую библиотеки DLL от случайных сайтов, но я был в отчаянии, и это сработало для меня. Надеясь, это может спасти других от многих часов разочарования.

0

В моем случае у меня было две версии PHP. Поэтому мне нужно было всего лишь использовать

$ /opt/lampp/bin/php artisan serve вместо

$ php artisan serve

0

Это сработало для меня:

$ sudo apt-get -y install php5.6-pgsql
$ sudo service apache2 restart

Я работаю с 32-битным Ubuntu 14

0

Старый поток, который я знаю, но я потерял пару часов своей жизни с этим. Вам также необходимо установить информацию о БД в файл .env. Вам здесь не нужно указывать драйвер, потому что используется значение по умолчанию, указанное в файле database.php(я думаю). Я боролся, потому что он имел DB_CONNECTION=mysql в файле .env, и я использовал pgsql.

0

Для тех, кто хочет использовать Postgresql в OpenSuse (и co), попробуйте следующее:

zypper --no-refresh in php5-pgsql
0

установите значение по умолчанию 'default' => 'sqlite';

check - http://three.laravel.com/docs/database/config

а это - настроить PostgreSQL с помощью Laravel в MAMP

-3

Использование Laravel V 5.5.39 с Php 7.1.12 работает нормально, но более поздние (более новые) версии php вызывают проблему. Таким образом, измените версию Php, и вы получите решение на 100%.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню