PHP 7.0下的Laravel 5.4:PDO异常 - 找不到驱动程序(MySQL)

34
我有一个 Laravel 5.4 项目,运行在我的 Ubuntu 14.04 上(VPS 带有 Plesk 12.5.30)。在创建了数据库并设置好必要信息的 .env 文件后,我运行了 php artisan migrate 命令,但是出现了异常:

[Illuminate\Database\QueryException]
could not find driver (SQL: select * from information_schema.tables where table_schema = pmaramaldb and table_name = migrations)

[PDOException]
could not find driver

我的 .env 文件内容如下:

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=pmaramaldb

DB_USERNAME=user

DB_PASSWORD=password

我遵循了大部分的指南来解决这个错误,但是没有任何积极的结果:

启用扩展解决方案:

PDO已启用

php.ini文件是自动生成的,我想这是由Plesk完成的。在文件开头,它说:

; 注意!
;
; 不要修改此文件,因为它是自动生成的,
; 所以您所有的更改都将在下一次生成文件时丢失。

所以我还是尝试了一下。之后我重新启动了Apache,然后再次尝试……还是不行。

安装php7.0-mysql解决方案:

我也尝试安装MySQL,以防它没有被安装:

user@server:/var/www/vhosts$ sudo apt-get install php7.0-mysql

Reading package lists... Done

Building dependency tree

Reading state information... Done

php7.0-mysql ya es la versión más reciente.

0 upgraded, 0 newly installed, 0 to remove and 67 not upgraded.

** Solución de instalación SQL Lite:**

También he intentado lo que dice este enlace: sudo apt-get install php5-sqlite y el resultado fue:

user@server:/var/www/vhosts/system/maramal.io/etc$ sudo apt-get install php5-sqlite

Reading package lists... Done

Building dependency tree

Reading state information... Done

php5-sqlite is already the newest version.

0 upgraded, 0 newly installed, 0 to remove and 67 not upgraded.

Composer Dump-autoload 解决方案:

这样也不行。我已经尝试过 composer dump-autoload,但它也不起作用。

运行命令 php -i 后:

PDO

PDO support => enabled

PDO drivers =>

...

PHP Version => 5.6.30-1+deb.sury.org~trusty+1

好的,我不确定这是否与错误有关,但通过运行 php -v 显示的版本是:

"user@server: ~/path$ php -v" 的输出结果是:PHP 5.6.30-1+deb.sury.org~trusty+1 (cli),版权所有1997-2016年PHP Group,使用Zend Engine v2.6.0,版权所有1998-2016年Zend Technologies,以及使用Zend OPcache v7.0.6-dev,版权所有1999-2016年Zend Technologies。

2
看起来你已经采取了通常的步骤。是时候再次检查一些基础知识了:你是否设置了 Laravel 使用其他数据库类型,如 MSSQL 或 PostgreSQL?服务器上是否混淆了 PHP 版本(我认为 Ubuntu 14.04 默认使用 PHP5.x)? - cypherabe
2
可能值得在CLI中执行php -i,以确保它与基于Web的版本匹配。有时候,在CLI上可能会得到不同于Apache上的PHP版本。 - apokryfos
2
嗯...另一个想法:如果我正确理解了这个过程,错误发生在php cli调用中。您看到链接问题中Leith的答案了吗?php-cli使用另一个ini文件,也许在这种情况下pdo驱动程序未被激活。 - cypherabe
2
@Maramal 最好的做法是执行 which php 命令,找到当前正在运行的 PHP 版本,删除它并将 PHP 7 的二进制文件链接到你的 /usr/bin 或其他路径目录。你当前的 CLI PHP 没有任何 PDO 驱动程序。 - apokryfos
2
@Maramal 尝试执行 mv /usr/bin/php /usr/bin/php.old 然后执行 ln -s /path/to/php/bin/php /usr/bin/php。不知道你的 PHP 安装在哪里,你可能需要查找一下(phpinfo 可能会显示它的位置)。 - apokryfos
显示剩余8条评论
13个回答

58

作为另一种解决方案,请确保你已经安装了php7-mysql。

尝试运行下面的命令

sudo apt install php7.0-mysql

或者,如果你想自动安装当前版本

sudo apt install php-mysql

24

同样的问题,Ubuntu 17.10,Laravel 5.5。

$ sudo apt install php7.1-pdo php7.1-mysql

图片描述

图片描述

这是一个很好的快速修复方法,希望能够帮到您。


19

Apache 使用的 PHP 和命令行链接的 PHP 之间存在冲突。(说实话,这种情况经常发生。)

通常的解决方法是:

which php

这告诉您在命令行中运行时将执行哪个PHP版本,例如:/usr/bin/php

mv /usr/bin/php /usr/bin/php.old

然后将正确的PHP版本链接或复制到可执行路径:

ln -s /path/to/php/bin/php /usr/bin/php

以下方法也应该有效。

cp /path/to/php/bin/php /usr/bin/php

如果您想手动安装模组,也建议这样做:

ln -s /path/to/php/bin/phpize /usr/bin/phpize
ln -s /path/to/php/bin/php-config /usr/bin/php-config
这样你的CLI将与你的Web服务器匹配。
更新:
如果您使用Ubuntu,并且有多个PHP可选安装,如此答案所述,您可以执行以下操作:
sudo update-alternatives --set php /usr/bin/php<version>
sudo update-alternatives --set phar /usr/bin/phar<version>
sudo update-alternatives --set phar.phar /usr/bin/phar.phar<version> 
sudo update-alternatives --set phpize /usr/bin/phpize<version> 
sudo update-alternatives --set php-config /usr/bin/php-config<version>

1
我已经进行了更改,但仍然出现相同的错误。我只想迁移我的数据库架构,在我的 Vagrant VM 上可以工作,但在我的 Aruba VPS 上却不行。我安装了 Debian 8 和最新的 php、mysql、phpmyadmin、composer、git,然后使用 Dploy npm 包无缝部署了我的 Laravel 项目。然后,由于 gitignore,我对 VPS 进行了一些更改,并因为 mysql 更改了 .env。然后启动并运行。一切看起来都很好。但是当我想将一个简单的表迁移到我的数据库时,它会出现与 @Maramal 提出的相同的错误。你提供的解决方案对我没有用。 - Zsolt Takács
1
在Windows上,which php 对我起作用了。我用nginx替换了wamp server,但我可以清楚地看到它仍在使用wamp PHP。 - agm1984
1
我的 composer.json 文件中有 php8.0 的版本,但是当我在 Ubuntu 上升级了所有的软件包并添加了 php (没有指定版本)后,系统默认安装了最新版(即8.1),导致 Ubuntu 使用的是 php8.1,而 Apache 却使用的是 php8.0。因此,我只需执行以下命令:sudo apt-get install php8.0-mysql 指定版本安装即可。 - Chris

10

我有与你相同的情况,以下是我的解决方法:

1)在终端中键入以下命令:

php --ini

这将输出当前php.ini配置文件的路径。

2)使用vim或您喜欢的编辑器编辑php.ini文件。

vim /etc/php.ini

注意,/etc/php.ini是php.ini文件的路径。在您的机器上可能会不同。

3)找到;extension=php_pdo_mysql.dll并去掉分号(;)以取消注释

4)保存您的php.ini更改

**5)重新启动Web服务器以应用更改

sudo systemctl restart apache2

**6)现在运行您的命令。

php artisan migrate

希望这对您有所帮助。


6

在Linux中操作如下:

首先检查您的PHP版本,可以按以下方式执行:

php -v

在你获得版本号之后,例如我得到了7.1,然后按照以下方式安装:

sudo apt-get install  php7.1-sqlite     //for laravel testing with sqlite
sudo apt-get install  php-mysql         //for default mysql
sudo apt-get install  php7.1-mysql      //for version based mysql 
sudo apt-get install  php7.1-common     //for other necessary package for php

需要重启Apache2

sudo service apache2 restart

谢谢你,你帮我省了时间。我把版本替换成了7.4,现在它可以运行了! - AlexKh
谢谢Jignesh。只需要添加php-mysql扩展。 - Digvijay
@Digvijay,你是对的,php-mysql会自动安装当前版本。 - Jignesh Joisar

4
您可以尝试以下命令。
php artisan cache:clear
php artisan config:clear  

然后重启你的apache服务器。之后重新配置你的.env文件。


3

你的数据库驱动程序已丢失。为了解决问题,

首先安装驱动程序。

对于Ubuntu:针对MySQL数据库。

sudo apt-get install php5.6-mysql/php7.2-mysql

您还可以搜索其他数据库系统。

您也可以搜索驱动程序:

sudo apt-cache search drivername

2

好的,我曾经遇到过这个错误……我不知道为什么,但似乎在php 7.3中与驱动程序或其他相关问题存在问题,我所做的就是切换回php 7.2,一切都正常了...

最初的回答:

我曾经遇到过这个错误。我不知道原因,但似乎在PHP 7.3中存在与驱动程序或其他相关问题有关的问题。我只需将版本切换回PHP 7.2,一切正常。


2
回滚到php7.2对我也起作用,同时在我的终端上运行以下命令:sudo a2dismod php7.3; sudo a2enmod php7.2; sudo update-alternatives --set php /usr/bin/php7.1; sudo service apache2 restart - Felix Runye

2
sudo apt install php7.2-pdo php7.2-mysql

1
清除工匠缓存。
php artisan cache:clear

并且

php artisan migrate:refresh

那就这样


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