Laravel: Помилка [PDOException]: Не вдалося знайти драйвер у PostgreSQL


78

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

Ось команди з database.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.


РЕДАГУВАТИ: При спробі перенести php artisan migrate я отримую "PDOException: не вдалося знайти драйвер". Я використовую WAMP і перебуваю в Win8.1. Використання PostgreSQL як бази даних.


РЕДАГУВАТИ: Експериментував із низкою альтернативних рішень, але я все одно мав би це вирішити. php.iniФайл був перевірений в Apache, WAMP (з папки PHP) і PostgreSQL. extension_dirПравильно , як ця істота ->extension_dir = "c:/wamp/bin/php/php5.5.12/ext/"

The 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 C ++ 2012) Налаштування команди cscript / nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "- без-pdo-mssql "" - без-pi3web "" - з-pdo-oci = C: \ php-sdk \ oracle \ x64 \ instantclient10 \ sdk, "" --with-oci8 = C: \ php -sdk \ oracle \ x64 \ instantclient10 \ sdk, "" --with-oci8-11g = C: \ php-sdk \ oracle \ x64 \ instantclient11 \ sdk, спільний "" --enable-object-out-dir = ../obj/ "" --enable-com-dotnet = shared "" --with-mcrypt = static "" --disable-static-analysis "" --with-pgo "


Якщо база даних - це ім'я вашої бази даних, тоді ви використовуєте зарезервоване слово як назву бази даних
David Jones

1
Моя назва бази даних PostgreSQL - postgres, як зазначено в коді ^
Hyperion

Чудово, абсолютно неправильно прочитав вашу публікацію. Ви впевнені, що laravel намагається підключитися до вашої бази даних postgres за замовчуванням?
Девід Джонс,

Я не думаю так :( здається, він намагається підключитися до MySQL за замовчуванням, і я хотів би зрозуміти, як це зробити. Вгадайте користувача sgt, як він зрозумів. Дякую, друже,
Hyperion

Відповіді:


88

Обов’язково налаштуйте '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.

Якщо ви все ще отримуєте виняток, можливо, вам доведеться додати \binкаталог postgres до вашого PATH:

  1. Властивості системи -> вкладка Додатково -> Змінні середовища
  2. У групі 'Системні змінні' в нижній половині вікна прокрутіть і знайдіть PATHзапис.
  3. Виберіть його та натисніть Редагувати
  4. В кінці існуючого запису введіть повний шлях до вашого каталогу bin postgres. Папка bin повинна знаходитися в кореневій частині каталогу встановлення postgres.
  5. Перезапустіть будь-які відкриті командні підказки або, щоб бути впевненими, перезавантажте комп'ютер.

Сподіваємось, це має вирішити будь-які проблеми. Для отримання додаткової інформації див.


Велике спасибі за вашу допомогу. Будь ласка, перевірте частину редагування в моєму дописі. До речі, шлях до бази даних за замовчуванням був моєю першою проблемою, про яку вже піклувались, проблема з драйвером PDO з’явилася відразу після.
Гіперіон

1
Файли DLL існують у папці розширень, чи не так? Крім того, спробуйте прокоментувати інший DLL: extension=php_pdo.dllце основний драйвер PDO, на який покладаються конкретні бази даних.
lainceline

Так, вони існують у цій папці. Не мати extension=php_pdo.dllв extні вphp.ini
Гіперіон

Чи можете ви зробити швидкий PHP-скрипт за допомогою phpinfo();? Це дасть вам фактичний каталог розширень та php.ini, які завантажуються. Можливо, триває конфлікт.
lainceline

Вибачте за затримку. Я скопіюю / вставлю інформацію в 1-й пост. Дуже дякую.
Гіперіон

47

Для PDOException: could not find driverдля MySQL, і , якщо вона Debianзаснована OS,

sudo apt-get -y install php5-mysql

8
І якщо ви використовуєте PostgreSQL на сучасній ОС на базі Debian, це так sudo apt-get -y install php7.0-pgsql.
Бен Джонсон,

30

Для PHP 7 в Ubuntu ви також можете зробити:

sudo apt-get install php7.0-pgsql

Отже, тепер ви можете не коментувати рядки в php.ini

UPD: У мене та сама помилка, тому проблема не в драйвері. Я міняв свій database.ini, але щоразу, коли бачив помилку. І я змінюю конфігурацію бази даних, .envі помилки зникають.


Це єдине, що працювало у мене на Ubuntu (спробував не коментувати рядки в php.ini без ефекту)
Бен Вілсон,

3
вирішив це, у моєму випадку використовуюsudo apt-get install php7.1-pgsql
Цезар Ромеро

Дякую. вирішено з цим, у моєму випадку використовую sudo apt-get install php7.4-pgsql
Mauro Lacerda


7

У мене була та сама проблема. Це те, що мені вдалося.

Є 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 годин на сервері Windows 10 Wamp, і проблема полягала в тому, що параметри Wamp впливають лише на файл php.ini у папці apache, але не в папці php. Дуже дякую!
Боржовський

7

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

brew install php56-pdo-pgsql

І замініть 56 на будь-яку версію PHP, яку ви використовуєте, без десяткової коми.



3

Я теж маю цю проблему. Я вже вирішив це питання. Якщо ви використовуєте Wamp, виконайте такі дії.

  1. Перейти до wamp64/www/bin/php/php*(де* знаходиться php-версія, яку ви використовуєте)
  2. Відредагуйте файл php і розкоментуйте цей рядок, видаливши крапку з комою:
;extension=pdo_pgsql to extension=pdo_pgsql
  1. Збережіть і перезапустіть ваш сервер Wamp

Якщо це не спрацює, перевірте .envще раз і вашу конфігурацію / базу даних.


Дякую. Це працює для мене.
Amanullah Aman

1

У мене була та ж помилка на PHP 7.3.7 Docker з Laravel:

Це працює для мене

apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pgsql pdo_pgsql

Це встановить драйвери pgsql та pdo_pgsql.

Тепер запустіть цю команду, щоб прокоментувати рядки extension = pdo_pgsql.so та extension = pgsql.so з php.ini

sed -ri -e 's!;extension=pdo_pgsql!extension=pdo_pgsql!' $PHP_INI_DIR/php.ini

sed -ri -e 's!;extension=pgsql!extension=pgsql!' $PHP_INI_DIR/php.ini

0

Для тих, хто хоче використовувати Postgresql на OpenSuse (і спільно), спробуйте наступне:

zypper --no-refresh in php5-pgsql

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

У ПК з 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. Потім перезапустив Ларагон, і проблема вирішена. 😊

Довідково: Як додати іншу версію PHP - Laragon Forum


0

У Linux (Ubuntu) просто встановіть драйвер так:

sudo apt-get install php-pgsql

Це встановить драйвер із використанням вашої поточної версії php.


-1

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



-2

Це спрацювало для мене:

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

Я працюю з 32-бітною Ubuntu 14


-2

Бачу, ви використовуєте Windows. Я не зміг це виправити, включивши будь-яке розширення, яке постачається з моїм сервером Windows WAMP. Я спробував PDO_ODBC та інші і навіть знайшов офіційний Microsoft PDO_SQLSRV .

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

Я зазвичай не використовую бібліотеки DLL із випадкових веб-сайтів, але я був у відчаї, і це спрацювало для мене. Сподіваючись, це може врятувати інших численні години розчарувань.


-4

Використання Laravel V 5.5.39 з Php 7.1.12 працює нормально, але пізніші (новіші) версії php викликають проблему. Отже, змініть версію Php, і ви отримаєте рішення на 100% .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.