Laravel和PostgreSQL出现PDOException异常,错误信息为“找不到驱动程序”。

6
首先,问题与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 Server 3.1.4
  • Apache 2.4.35
  • PHP 7.2.10
  • Laravel Framework 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()); 时,我得到以下输出:

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

相关的php信息如下:

Screenshot of phpinfo

注意:当我使用mysql而不是postgresql时,没有问题。
注意2:当我使用常规PHP时,我可以连接数据库。只有Laravel会出现这个错误。

你的模型中也定义了这个驱动程序吗?请展示触发错误的代码。 - Bram Verstraten
我在问题的第二段中添加了如何获取错误的信息。我还有一个名为Product的模型。 - Yavuz
4个回答

11
安装PostgreSQL
sudo apt-get install php-pgsql

接下来在etc/php/$PHP版本号/apache2/php.ini文件中取消注释pgsql和pdo-pgsql扩展

然后重新启动apache2


我在我的php.ini文件中有extension=pdo_pgsql和extension=pgsql。它们已经被取消注释了。 - Yavuz

2

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

需要时安装php7.2-pgsql


我的PHP版本是7.2.10。我正在使用WAMP,并激活了pdo_pgsql和pgsql扩展。 - Yavuz
在这种情况下,您应该按照以下指南安装php pgsql在WAMP上 https://www.carnaghan.com/knowledge-base/how-to-setup-postgresql-on-wamp-server/ - Bram Verstraten

2

我解决了这个问题。我认为这是WAMP的一个bug。当我从WAMP的菜单编辑php.ini时,它打开的是不同于当前PHP版本的php.ini文件。所以我从文件系统中打开php.ini并在那里进行了编辑。


0

你的 WAMP 服务器上安装了不同版本的 PHP。当你点击 WAMP 图标时,它会显示 pgsql 和 pdo_pgsql 已激活,但是针对不同的 PHP 版本。你需要使用 php -v 命令检查你的 PHP 版本,然后进入 WAMP 文件夹找到相应的 PHP 版本,并编辑 php.ini 文件,在那里启用 pgsql 扩展。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接