Я пытаюсь подключиться к базе данных 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.
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"
Обязательно настройте ключ '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
.Это, надеюсь, решит любые проблемы. Для получения дополнительной информации см.:
extension=php_pdo.dll
Это основной драйвер PDO, на котором основаны конкретные базы данных.
Для PDOException: could not find driver
для MySQL
, и если это ОС на основе Debian
,
sudo apt-get -y install php5-mysql
sudo apt-get -y install php7.0-pgsql
.
Для PHP 7 в Ubuntu вы также можете:
sudo apt-get install php7.0-pgsql
Итак, теперь вы не можете раскомментировать строки в php.ini
UPD:
У меня такая же ошибка, поэтому проблема не в драйвере.
Я изменил свой database.ini
, но каждый раз, когда я видел ошибку.
И я изменяю конфигурацию базы данных в .env
, и ошибки ушли.
sudo apt-get install php7.1-pgsql
Я понимаю, что это старый вопрос, но я нашел его в поиске Google, поэтому я собираюсь идти дальше и отвечать на случай, если кто-то еще столкнется с этим. Я нахожусь на Mac и имею ту же проблему, но решил ее, используя HomeBrew. После того, как вы его установили, вы можете просто запустить эту команду:
brew install php56-pdo-pgsql
И замените 56 любой версией PHP, которую вы используете, без десятичной точки.
Это сработало для меня:
$ sudo apt-get install php-gd php-mysql
У меня была такая же проблема. Это то, что сработало для меня.
Есть 2 файла php.ini:
ПРИМЕЧАНИЕ. Это использует мою версию PHP и Apache, изменяя их.
Файл php.ini, расположенный в обеих папках, - это то, что вам нужно обновить, расширения:
Это то, что вам нужно раскомментировать (удалить символ;).
Перезапустите Wamp и командную строку.
Надеюсь, это сработает для вас:).
sudo apt-get install php7.1-pgsql
У меня тоже есть эта проблема. Я уже решил эту проблему. Если вы используете Wamp, выполните следующие действия.
- Зайдите на
wamp64/www/bin/php/php*
(где*
- это версия php, которую вы используете)- Отредактируйте файл php и раскомментируйте эту строку, удалив точку с запятой:
;extension=pdo_pgsql to extension=pdo_pgsql
- Сохраните и перезапустите сервер Wamp
Если это не работает, пожалуйста, проверьте .env
и config/database снова.
На ПК с 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 и проблема решена.
Решено через 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, а затем выполнить миграцию будет работать...
Я был на общем хостинге и там мне пришлось включить все pdo
Я вижу, что вы используете Windows. Я не смог исправить это, включив любое из расширений, поставляемых с моим сервером Windows WAMP. Я попробовал PDO_ODBC и другие и даже нашел официальный Microsoft PDO_SQLSRV.
Решением для меня было установить драйверы PDO_SQLSRV со стороннего сайта. Я нашел драйверы через http://robsphp.blogspot.nl/2012/06/unofficial-microsoft-sql-server-driver.html
Я обычно не использую библиотеки DLL от случайных сайтов, но я был в отчаянии, и это сработало для меня. Надеясь, это может спасти других от многих часов разочарования.
В моем случае у меня было две версии PHP. Поэтому мне нужно было всего лишь использовать
$ /opt/lampp/bin/php artisan serve
вместо
$ php artisan serve
Это сработало для меня:
$ sudo apt-get -y install php5.6-pgsql
$ sudo service apache2 restart
Я работаю с 32-битным Ubuntu 14
Старый поток, который я знаю, но я потерял пару часов своей жизни с этим. Вам также необходимо установить информацию о БД в файл .env. Вам здесь не нужно указывать драйвер, потому что используется значение по умолчанию, указанное в файле database.php(я думаю). Я боролся, потому что он имел DB_CONNECTION=mysql
в файле .env, и я использовал pgsql.
Для тех, кто хочет использовать Postgresql в OpenSuse (и co), попробуйте следующее:
zypper --no-refresh in php5-pgsql
установите значение по умолчанию 'default' => 'sqlite';
Использование Laravel V 5.5.39 с Php 7.1.12 работает нормально, но более поздние (более новые) версии php вызывают проблему. Таким образом, измените версию Php, и вы получите решение на 100%.