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

Laravel: Error [PDOException]: Could not Find Driver in PostgreSQL

提问人:Hyperion 提问时间:8/15/2014 最后编辑:vbenceHyperion 更新时间:3/17/2023 访问量:368678

问:

我正在尝试通过Laravel与PostgreSQL数据库连接,以便进行php工匠迁移,但似乎没有被指示,因为它正在读取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.iniextension_dirextension_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 配置.js “--启用快照构建” “--禁用-isapi” “--启用调试包” “--没有 mssql” “--没有 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”

php 数据库 postgresql laravel 语法错误

评论

0赞 David Jones 8/15/2014
如果 database 是数据库的名称,则使用保留字作为数据库名称
1赞 Hyperion 8/15/2014
我的 PostgreSQL 数据库名称是 postgres,如代码所示^
0赞 David Jones 8/15/2014
太棒了,完全误读了你的帖子。您确定 laravel 正在尝试默认连接到您的 postgres 数据库吗?
0赞 Hyperion 8/16/2014
我不这么认为:(似乎它正在尝试默认连接到 MySQL,我想弄清楚如何连接。猜猜用户 sgt 已经想通了。非常感谢,我的朋友。

答:

105赞 lainceline 8/16/2014 #1

请务必在'default'app/config/database.php

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

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

对于 Windows,扩展应该与官方 PHP 发行版一起预下载。只需编辑您的并取消注释这些行,然后pgsqlphp.iniextension=pdo_pgsql.soextension=pgsql.so

此外,在 中,请确保设置为正确的目录。它应该是 PHP 安装目录中一个名为 or 或类似的文件夹。php.iniextension_dirextensionsext

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

如果仍然出现异常,则可能需要将 postgres 目录添加到:\binPATH

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

这应该有望解决任何问题。有关详细信息,请参阅:

评论

0赞 Hyperion 8/16/2014
非常感谢您的帮助。请检查我帖子中的编辑部分。 顺便说一句,默认数据库路径是我的第一个问题,已经解决了,PDO驱动程序问题紧随其后。
1赞 lainceline 8/16/2014
DLL文件存在于扩展文件夹中,对吗?此外,请尝试取消注释另一个 DLL:这是特定于数据库的 PDO 驱动程序所依赖的主要 PDO 驱动程序。extension=php_pdo.dll
0赞 Hyperion 8/16/2014
是的,它们确实存在于该文件夹中。不要在 NOR 中extension=php_pdo.dllextphp.ini
0赞 lainceline 8/16/2014
你能用一个快速的 php 脚本吗?它将为您提供实际的扩展目录和正在加载的 php.ini。可能会发生冲突。phpinfo();
0赞 Hyperion 8/17/2014
很抱歉耽搁了。我将复制/粘贴第 1 篇文章中的信息。多谢。
49赞 Nasif Md. Tanjim 11/27/2014 #2

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

sudo apt-get -y install php5-mysql

评论

8赞 Ben Johnson 5/13/2016
如果您在基于 Debian 的现代操作系统上使用 PostgreSQL,它是 .sudo apt-get -y install php7.0-pgsql
0赞 JWL 3/8/2015 #3

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

zypper --no-refresh in php5-pgsql
7赞 user3293860 5/7/2015 #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 和命令提示符。

希望它能:)对你有用。

评论

0赞 Borjovsky 9/6/2019
最后!我在 Windows 2 Wamp Server 上尝试了 10 个小时,问题是 Wamp 的选项只影响 apache 文件夹中的 php.ini 文件,而不影响 php 文件夹中的 php。多谢!
8赞 William Brawner 9/2/2015 #5

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

brew install php56-pdo-pgsql

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

-1赞 Mark D 7/2/2016 #6

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

42赞 Святослав Павленко 8/30/2016 #7

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

sudo apt-get install php7.0-pgsql

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

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

评论

0赞 Ben Wilson 8/2/2017
这是在 Ubuntu 上唯一对我有用的东西(尝试在 php.ini 中取消注释行但没有效果)
3赞 Cesar Romero 11/10/2018
用这个解决了,在我的情况下使用sudo apt-get install php7.1-pgsql
0赞 Mauro Lacerda 9/19/2020
谢谢。用这个解决了,在我的情况下使用sudo apt-get install php7.4-pgsql
-2赞 Nouks 1/5/2017 #8

这对我有用:

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

我正在使用 32 位 Ubuntu 14

8赞 Lucky 7/29/2017 #9

这对我有用:

$ sudo apt-get install php-gd php-mysql
3赞 Sujal Patel 11/10/2017 #10
sudo apt-get install php7.1-pgsql
-2赞 Neo 3/8/2018 #11

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

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

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

-4赞 Hashmat Waziri 3/30/2018 #12

将 Laravel V 5.5.39 与 Php 7.1.12 一起使用可以正常工作,但更高(更新的)php 版本会导致问题。因此,更改 Php 版本,您将获得 100% 的解决方案。

2赞 Jozsa-Csiki Lorant Csaba 7/27/2018 #13

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::(“找不到驱动程序”)

我检查了 shell(适用于 Windows 的 git bash),它返回了 C:\wamp64\bin\php\php7.2.4\php.ini 而不是由 WAMP 加载的 c:\wamp64\bin\apache\apache2.4.33\bin\php.ini 所以你必须在C:\wamp64\bin\php\php7.2.4\php.ini中取消注释pgsql和pdo_pgsql扩展,然后迁移才能工作......$ php --ini

0赞 Mayeenul Islam 9/15/2018 #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.20PATHphp --iniphp-7.1.7-Win32-VC14-x64

因此,在 中,我将路径更改为最新的 PHP 版本。然后重新启动 Laragon,问题就解决了。😊laragaon/etc/apache2/mod_php.conf

参考:如何添加另一个PHP版本 - Laragon Forum

4赞 11Strong 1/16/2019 #15

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

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

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

-1赞 Md Al imrun Khandakar 6/16/2019 #16

只需运行此命令

sudo apt-get -y install php*-mysql
3赞 Ash 7/31/2019 #17

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

现在运行此命令以取消对 php 中 extension=pdo_pgsql.so 和 extension=pgsql.so 行的注释.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
2赞 Tafadzwa L Nyamukapa 11/7/2020 #18

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

sudo apt-get install php-pgsql

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

3赞 EACUAMBA 2/18/2021 #19

You should remove the comment before extension on your driver.

默认情况下,驱动程序已停用,您应该自己激活。在那之后,它会很好地工作。

我希望这样做。

1赞 Caio Ladislau 4/25/2022 #20

对于像 20.04+ 这样的 Ubuntu,只需安装:

sudo apt install php-pgsql

记得安装之前。它会在安装时将驱动程序置于正确的路径中。apache2php

1赞 Jagdeep Singh 7/24/2022 #21

如果您在 Windows 中使用 Wamp,则必须直接从 PHP 文件夹编辑文件,该文件夹通常并且需要通过删除这些扩展名的前面来取消注释扩展名:php.iniC:\wamp64\bin\php\php8.0.13;

  1. extension=pdo_pgsql
  2. extension=pgsql
  3. 在环境变量中检查您的 PHP 路径。
  4. 重新启动 wamp 并重新启动 cmd 或 vs code(如果使用 vs code CMD)
0赞 Hanie Asemi 9/3/2022 #22

如果您使用的是 Docker,则可以在 .它将安装将 PHP 连接到 PostgreSQL 所必需的。php/Dockerfilepdopgsqlpdo_pgsql

FROM php:8.0.3-fpm
RUN apt-get update

# Install useful tools
RUN apt-get -y install apt-utils nano wget dialog vim

# Install important libraries
RUN echo "\e[1;33mInstall important libraries\e[0m"
    RUN apt-get -y install --fix-missing \
    apt-utils \
    build-essential \
    git \
    curl \
    libcurl4 \
    libcurl4-openssl-dev \
    zlib1g-dev \
    libzip-dev \
    zip \
    libbz2-dev \
    locales \
    libmcrypt-dev \
    libicu-dev \
    libonig-dev \
    libxml2-dev

RUN echo "\e[1;33mInstall important docker dependencies\e[0m"
RUN docker-php-ext-install \
    exif \
    pcntl \
    bcmath \
    ctype \
    curl \
    iconv \
    xml \
    soap \
    pcntl \
    mbstring \
    tokenizer \
    bz2 \
    zip \
    intl

# Install Postgre PDO
RUN apt-get install -y libpq-dev \
    && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
    && docker-php-ext-install pdo pdo_pgsql pgsql