Laravel:错误[PDOException]:在PostgreSQL中找不到驱动程序


77

我正在尝试通过Laravel与PostgreSQL数据库进行连接,以进行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迁移时,我得到一个'PDOException:找不到驱动程序'。我正在使用WAMP,并且在Win8.1中。使用PostgreSQL作为数据库。


编辑: 已经尝试了一系列替代解决方案,但我仍然应该解决这个问题。该php.ini文件在Apache,WAMP(来自php文件夹)和PostgreSQL中进行了检查。这extension_dir是正确的->extension_dir = "c:/wamp/bin/php/php5.5.12/ext/"

extension=pdo_pgsql.dllextension=pgsql.dll是注释。

完成PATH“系统变量”中的技巧,然后重新启动。没有机会。

感谢你目前的帮助。

这是我的司机php_pdo_driver.hphp_pdo.hC:\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“” --without-pi3web“” --with-pdo-oci = C:\ php-sdk \ oracle \ x64 \ instantclient10 \ sdk,shared“” --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-analyze“” --with-pgo“


如果数据库是数据库的名称,则您使用保留字作为数据库名称
David Jones

1
如代码^所示,我的PostgreSQL数据库名称为postgres
Hyperion

太棒了,完全误读了您的帖子。您确定laravel默认尝试连接到您的postgres数据库吗?
大卫·琼斯

我不这么认为:(好像它试图在默认情况下连接到MySQL,我想弄清楚如何猜到了它的用户SGT非常感谢,我的朋友。
海波

Answers:


86

确保在中配置'default'密钥app/config/database.php

对于postgres,这将是 'default' => 'postgres',

如果收到[PDOException] could not find driver错误,请检查是否安装了正确的PHP扩展。你需要pdo_pgsql.sopgsql.so安装并启用。有关如何执行此操作的说明因操作系统而异。

对于Windows,pgsql扩展应随PHP官方发行版一起预下载。只需编辑您的内容,php.ini然后取消注释extension=pdo_pgsql.soextension=pgsql.so

同样,在中php.ini,确保extension_dir将其设置为正确的目录。它应该是PHP安装目录中一个名为extensionsext类似文件夹。

最后,复制libpq.dllC:\wamp\bin\php\php5.*\进入C:\wamp\bin\apache*\bin通过WampServer接口并重新启动所有服务。

如果仍然出现异常,则可能需要将postgres\bin目录添加到您的PATH

  1. 系统属性->高级选项卡->环境变量
  2. 在窗口下半部分的“系统变量”组中,滚动浏览并找到PATH条目。
  3. 选择它,然后单击编辑。
  4. 在现有条目的末尾,将完整路径放入您的postgres bin目录。bin文件夹应位于postgres安装目录的根目录中。
  5. 重新启动所有打开的命令提示符,或者确定要重新启动计算机。

这有望解决任何问题。有关更多信息,请参见:


非常感谢您的帮助。请检查我帖子中的编辑部分。顺便说一句,默认数据库路径是我已经解决的第一个问题,之后便出现了PDO驱动程序问题。
Hyperion

1
DLL文件存在于扩展文件夹中吗?另外,请尝试取消注释另一个DLL:extension=php_pdo.dll这是特定于数据库的DLL依赖的主要PDO驱动程序。
lainceline 2014年

是的,它们确实存在于该文件夹中。extension=php_pdo.dllextphp.ini
Hyperion

你能用一个快速的PHP脚本phpinfo();吗?它会为您提供实际的扩展目录和正在加载的php.ini。可能会发生冲突。
lainceline 2014年

抱歉耽搁了。我将在第一篇文章中复制/粘贴信息。非常感谢。
Hyperion

47

对于PDOException: could not find driverMySQL,如果它是Debian基于操作系统,

sudo apt-get -y install php5-mysql

8
而且,如果您在现代的基于Debian的OS上使用PostgreSQL,则为sudo apt-get -y install php7.0-pgsql
本·约翰逊

30

对于Ubuntu中的PHP 7,您还可以执行以下操作:

sudo apt-get install php7.0-pgsql

因此,现在您不能取消注释行 php.ini

UPD: 我有一个相同的错误,因此问题不在驱动程序中。我更改了database.ini,但每次看到错误。我更改了数据库配置.env,错误消失了。


这是唯一在Ubuntu上对我有用的东西(php.ini中取消注释的行无效)
Ben Wilson

3
解决此问题,以我sudo apt-get install php7.1-pgsql
Cesar Romero

谢谢。解决此问题,以我 sudo apt-get install php7.4-pgsql
为例

9

这为我工作:

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


像一个有魅力的人!谢谢:)
dev_dodiya

7

我意识到这是一个老问题,但是我在Google搜索中找到了它,所以我将继续回答,以防万一其他人遇到这个问题。我在Mac上也有同样的问题,但是使用HomeBrew解决了。安装完毕后,您可以运行以下命令:

brew install php56-pdo-pgsql

并使用您使用的任何版本的PHP(不带小数点)替换56。


6

我遇到过同样的问题。这对我有用。

有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和命令提示符。

希望它将为您工作:)。


最后!我在Windows 10 Wamp Server上尝试了2个小时,问题是Wamp的选项仅影响apache文件夹中的php.ini文件,而不影响php文件夹中的文件。非常感谢!
Borjovsky


2

我也有这个问题。我已经解决了这个问题。如果您正在使用Wamp,请执行以下步骤。

  1. 转到wamp64/www/bin/php/php**您使用的PHP版本在哪里)
  2. 编辑文件php并通过删除分号取消注释此行:
;extension=pdo_pgsql to extension=pdo_pgsql
  1. 保存并重新启动Wamp服务器

如果它不起作用,请.env再次检查您的和配置/数据库。


1

我在带有laravel的PHP 7.3.7 docker上遇到了相同的错误:

这对我有用

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

这将安装pgsql和pdo_pgsql驱动程序。

现在运行此命令以取消注释php.ini中的extension = pdo_pgsql.so和extension = pgsql.so行

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

对于那些希望在OpenSuse(和co)上使用Postgresql的人,请尝试以下操作:

zypper --no-refresh in php5-pgsql

0

3小时后解决了...我正在使用WAMP(PHP 7.2.4),PostgreSQL 10,Laravel 5.6.29。从Wampserver 3.3加载了PHP扩展(pgsql,pdo_pgsql),然后我能够使用www目录中的简单php testcode连接到PostgreSQL服务器。但是$ php artisan migrate还是回来了

PDOException::(“找不到驱动程序”)

我使用来检查外壳程序(对于Windows来说是git bash)$ php --ini,它返回了C:\ wamp64 \ bin \ php \ php7.2.4 \ php.ini而不是c:\ wamp64 \ bin \ apache \ apache2.4.33 \ bin \ php.ini ,由WAMP加载因此,您还必须在C:\ wamp64 \ bin \ php \ php7.2.4 \ php.ini中取消注释pgsql和pdo_pgsql扩展,然后进行迁移即可...


0

在装有Laragon 3.4.0 180809的Windows 8 PC中,我遇到了同样的问题。就我而言,这是因为我更新了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论坛


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 Server随附的任何扩展来解决此问题。我尝试了PDO_ODBC等,甚至找到了Microsoft Official 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%的解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.