Laravel 和 Postgresql 带有消息“找不到驱动程序”错误的 PDOException

Posted

技术标签:

【中文标题】Laravel 和 Postgresql 带有消息“找不到驱动程序”错误的 PDOException【英文标题】:PDOException with message 'could not find driver' Error for Laravel and Postgresql 【发布时间】:2020-01-21 06:00:20 【问题描述】:

首先,问题在于 Laravel 而不是 postgresql 或 php。我可以用一个简单的 PHP 文件连接 postgresql。但是 Laravel 无法做到这一点。

当我尝试使用 laravel 连接计算机中的 postgresql 服务器时,我收到“PDOException with message 'could not find driver'”错误。当我在 artisan tinker 运行 DB::connection()->getPdo(); 命令时出现此错误。

如果我运行php artisan migrate 命令,错误是Illuminate\Database\QueryException : could not find driver (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations and table_type = 'BASE TABLE')

我的配置如下:

Windows 10 Wamp 服务器 3.1.4 Apache 2.4.35 PHP 7.2.10 Laravel 框架 6.0.3

Laravel .env 文件相关行:

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=laravel_dnm1
DB_USERNAME=postgres
DB_PASSWORD=mrd.BE.265

Laravel database.php 文件相关行:

'default' => env('DB_CONNECTION', 'pgsql'),

...

    'pgsql' => [
        'driver' => 'pgsql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '5432'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'prefix_indexes' => true,
        'schema' => 'public',
        'sslmode' => 'prefer',
    ],

当我在我的服务器上运行 print_r(PDO::getAvailableDrivers()); 时,我得到以下输出:

数组([0] => mysql [1] => pgsql [2] => sqlite)

php信息的相关行如下:

注意:当我使用mysql而不是postgresql时没有问题。

注意2:当我使用普通PHP时,我可以连接数据库。只有 Laravel 给出了这个错误。

【问题讨论】:

您是否也在您的模型中定义了此驱动程序?请告诉我们触发错误的代码? 我在问题的第二段中添加了如何获取错误。我也有一个名为 Product 的模型。 【参考方案1】:

安装postgresql

sudo apt-get install php-pgsql

然后在 etc/php/$PHP_VERSION/apache2/php.ini 文件中取消注释 pgsql 和 pdo-pgsql 扩展

然后重启apache2

【讨论】:

我的 php.ini 文件中有 extension=pdo_pgsql 和 extension=pgsql。它们已取消注释。【参考方案2】:

使用 php -v 验证您的 PHP 版本

在需要时安装php7.2-pgsql

【讨论】:

我的 PHP 版本是 7.2.10。我正在使用 WAMP 并激活 pdo_pgsql 和 pgsql 扩展。 在这种情况下,您应该按照本指南了解如何在 WAMP 上安装 php pgsql carnaghan.com/knowledge-base/…【参考方案3】:

我解决了这个问题。我认为这是 WAMP 的一个错误。当我从 WAMP 的菜单中编辑 php.ini 时,它会打开一个与活动 PHP 版本不同的 php.ini。所以我从文件系统打开 php.ini 并从那里编辑它。

【讨论】:

【参考方案4】:

您的 WAMP SERVER 上安装了不同的 php 版本。当您单击 WAMP 图标时,它将显示 pgsql 和 pdo_pgsql 处于活动状态,但适用于不同的 php 版本。您需要使用 php -v 命令检查您的 php 版本,然后转到 WAMP 文件夹并找到该 php 版本并编辑 php.ini 文件并在那里启用 pgsql 扩展。

【讨论】:

以上是关于Laravel 和 Postgresql 带有消息“找不到驱动程序”错误的 PDOException的主要内容,如果未能解决你的问题,请参考以下文章

带有消息“找不到驱动程序”的 PostgreSql 'PDOException'

在 MAMP 中使用 Laravel 设置 PostgreSQL

不能将 0 或 1 存储为布尔 laravel postgresql

Laravel 5 - 带有消息“无法准备路由”的异常“LogicException”

带有消息“未定义变量”的 Laravel Tinker ErrorException

Laravel 错误未捕获的异常 'ReflectionException' 并带有消息'Class App\Http\Kernel 不存在'