【问题标题】:Laravel: Error [PDOException]: Could not Find Driver in PostgreSQLLaravel:错误 [PDOException]:在 PostgreSQL 中找不到驱动程序
【发布时间】:2014-10-09 08:37:28
【问题描述】:

我正在尝试通过 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 migrate 时,我收到“PDOException:找不到驱动程序”。我正在使用 WAMP,我在 Win8.1 中。使用 PostgreSQL 作为数据库。


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

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

在“系统变量”中完成PATH 技巧并重新启动。没有机会。

感谢到目前为止的帮助。

这些是我的驱动程序 php_pdo_driver.hphp_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” “--without-pdo-mssql” “--没有 pi3web” “--with-pdo-oci=C:\php-sdk\oracle\x64\instantclient10\sdk,shared” “--with-oci8=C:\php-sdk\oracle\x64\instantclient10\sdk,shared” “--with-oci8-11g=C:\php-sdk\oracle\x64\instantclient11\sdk,shared” “--enable-object-out-dir=../obj/” “--enable-com-dotnet=shared” "--with-mcrypt=static" "--disable-static-analyze" "--with-pgo"

【问题讨论】:

  • 如果数据库是您的数据库名称,那么您使用保留字作为数据库名称
  • 我的 PostgreSQL 数据库名称是 postgres,如代码所示^
  • 太棒了,完全误读了您的帖子。您确定 laravel 正在尝试默认连接到您的 postgres 数据库吗?
  • 我不这么认为:(默认情况下它似乎正在尝试连接到 MySQL,我想弄清楚如何。猜猜用户 sgt 想出来了。非常感谢,我的朋友。

标签: php database postgresql laravel syntax-error


【解决方案1】:

一定要在app/config/database.php中配置'default'

对于 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 或类似名称的文件夹。

最后,将C:\wamp\bin\php\php5.*\中的libpq.dll复制到C:\wamp\bin\apache*\bin,并通过WampServer接口重启所有服务。

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

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

这有望解决任何问题。欲了解更多信息,请参阅:

【讨论】:

  • 非常感谢您的帮助。请检查我帖子中的编辑部分。顺便说一句,默认数据库路径是我已经处理的第一个问题,PDO 驱动程序问题紧随其后。
  • DLL 文件存在于 extensions 文件夹中吧?另外,尝试取消注释另一个 DLL:extension=php_pdo.dll 这是数据库特定依赖的主要 PDO 驱动程序。
  • 是的,它们确实存在于该文件夹中。在extphp.ini 中都没有extension=php_pdo.dll
  • 你能用phpinfo(); 做一个快速的php 脚本吗?它将为您提供实际的扩展目录和正在加载的 php.ini。可能会发生冲突。
  • 抱歉耽搁了。我将复制/粘贴第一篇文章中的信息。非常感谢。
【解决方案2】:

对于PDOException: could not find driver 对于MySQL,如果是基于Debian 的操作系统,

sudo apt-get -y install php5-mysql

【讨论】:

  • 如果您在基于 Debian 的现代操作系统上使用 PostgreSQL,则为 sudo apt-get -y install php7.0-pgsql
【解决方案3】:

对于 Ubuntu 中的 PHP 7,您也可以这样做:

sudo apt-get install php7.0-pgsql

所以,现在你不能取消 php.ini 中的注释

统一更新: 我有同样的错误,所以问题不在驱动程序中。 我更改了我的database.ini,但每次我看到一个错误。 我在.env 中更改了数据库配置,并且错误消失了。

【讨论】:

  • 这是在 Ubuntu 上唯一对我有用的东西(尝试在 php.ini 中取消注释行无效)
  • 解决了这个问题,在我的情况下使用sudo apt-get install php7.1-pgsql
  • 谢谢。解决了这个问题,在我的情况下使用sudo apt-get install php7.4-pgsql
【解决方案4】:

这对我有用:

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

【讨论】:

    【解决方案5】:

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

    brew install php56-pdo-pgsql
    

    并将 56 替换为您使用的任何版本的 PHP,不带小数点。

    【讨论】:

    • 拯救了我的一天~~~~~~
    【解决方案6】:

    我有同样的问题。这对我有用。

    有2个php.ini文件:

    • C:\wamp\bin\apache\apache2.4.9\bin
    • C:\wamp\bin\php\php5.5.12

    注意:这是使用我的 PHP 和 Apache 版本,请更改为您的版本。

    位于这两个文件夹中的 php.ini 文件是您需要更新的,扩展名:

    • extension=php_pdo_pgsql.dll
    • extension=php_pgsql.dll

    这些是您需要取消注释的内容(删除 ; 符号)。

    重新启动 Wamp 和命令提示符。

    希望它对你有用:)。

    【讨论】:

    • 终于!我在 Windows 10 Wamp Server 上尝试了 2 个小时,问题是 Wamp 的选项仅影响 apache 文件夹中的 php.ini 文件,而不影响 php 文件夹中的文件。非常感谢!
    【解决方案7】:
    sudo apt-get install php7.1-pgsql
    

    【讨论】:

      【解决方案8】:

      我也遇到了这个问题。我已经解决了这个问题。如果您使用的是 Wamp,请执行以下步骤。

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

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

      【讨论】:

        【解决方案9】:

        我在使用 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 驱动程序。

        现在运行此命令以取消注释行 extension=pdo_pgsql.so 和 extension=pgsql.so from 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
        

        【讨论】:

          【解决方案10】:

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

          PDOException::("找不到驱动程序")

          我用 $ php --ini 检查了 shell(Windows 的 git bash),它返回 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 扩展,然后迁移将起作用...

          【讨论】:

            【解决方案11】:

            在 Linux(Ubuntu) 中只需像这样安装驱动程序:

            sudo apt-get install php-pgsql
            

            这将使用您的 php 当前版本安装驱动程序。

            【讨论】:

              【解决方案12】:

              驱动程序默认禁用,您应该自己激活。之后它会很好地工作。

              我希望这样做。

              【讨论】:

                【解决方案13】:

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

                zypper --no-refresh in php5-pgsql
                

                【讨论】:

                  【解决方案14】:

                  在装有 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,问题就解决了。 ?

                  参考:How to add another PHP version - Laragon Forum

                  【讨论】:

                    【解决方案15】:

                    我知道旧线程,但我因此失去了几个小时的生命。您还需要在 .env 文件中设置数据库信息。您没有 在此处指定驱动程序,因为使用了 database.php 中指定的默认值(我认为)。我很挣扎,因为它在 .env 文件中有DB_CONNECTION=mysql,而我正在使用 pgsql。

                    【讨论】:

                      【解决方案16】:

                      只需运行此命令

                      sudo apt-get -y install php*-mysql
                      

                      【讨论】:

                        【解决方案17】:

                        这对我有用:

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

                        我正在使用 32 位 Ubuntu 14

                        【讨论】:

                          【解决方案18】:

                          我看到您使用的是 Windows。我无法通过启用 Windows WAMP 服务器附带的任何扩展来解决此问题。我尝试了 PDO_ODBC 和其他人,甚至找到了Microsoft Official PDO_SQLSRV

                          我的解决方案是从第三方网站安装 PDO_SQLSRV 驱动程序。我通过以下方式找到了驱动程序 http://robsphp.blogspot.nl/2012/06/unofficial-microsoft-sql-server-driver.html

                          我通常不使用随机网站的 DLL,但我很绝望,这对我有用。希望它可以为其他人节省数小时的挫败感。

                          【讨论】:

                            【解决方案19】:

                            使用 Laravel V 5.5.39 和 Php 7.1.12 工作正常,但后来(更新)的 php 版本会导致问题。所以,改变 PHP 版本,你会得到解决方案 100%

                            【讨论】:

                              猜你喜欢
                              • 2017-02-20
                              • 2015-05-14
                              • 1970-01-01
                              • 2015-08-12
                              • 2015-05-20
                              • 2020-01-21
                              • 2016-05-16
                              相关资源
                              最近更新 更多