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

Posted

技术标签:

【中文标题】PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)【英文标题】:Laravel 5.4 on PHP 7.0: PDO Exception - Could not find driver (MySQL) 【发布时间】:2017-08-12 01:45:33 【问题描述】:

我的 Ubuntu 14.04(带有 Plesk 12.5.30 的 VPS)上有一个 Laravel 5.4 项目。创建数据库并使用所需信息设置 .env 文件后,我运行php artisan migrate 并引发异常:

[Illuminate\Database\QueryException] 找不到驱动程序(SQL:select * from information_schema.tables where table_schema = pmaramaldb and table_name = migrations)

[PDO异常] 找不到驱动程序

我的 .env 文件有:

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=pmaramaldb

DB_USERNAME=用户

DB_PASSWORD=密码

我已按照大多数指南来解决此错误,但没有任何积极的结果:

启用扩展解决方案:

PDO is enabled

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

;注意! ; ;请勿修改此文件,因为它是自动生成的, ;因此,下次生成文件时,您所做的所有更改都将丢失。

所以我还是试过了。之后,我重新启动了 Apache,然后再次尝试...没有用。

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

我也尝试安装 MySQL,以防万一:

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

Leyendo lista de paquetes... Hecho

Creando árbol de dependencias

Leyendo la informationación de estado... Hecho

php7.0-mysql已经是最新版本了。

0actualizados, 0 se instalarán, 0 para eliminar y 67 no actualizados.

** SQL Lite 安装解决方案:**

我也尝试过question link 说:sudo apt-get install php5-sqlite,结果是:

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

Leyendo lista de paquetes... Hecho

Creando árbol de dependencias

Leyendo la informationación de estado... Hecho

php5-sqlite 已经是最新版本了。

0actualizados, 0 se instalarán, 0 para eliminar y 67 no actualizados.

Composer Dump-autoload 解决方案:

它也没有工作。我试过composer dump-autoload,但没用。

运行命令后php -i:

PDO

PDO 支持 => 已启用

PDO 驱动程序 =>

...

PHP 版本 => 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)

版权所有 (c) 1997-2016 PHP 组

Zend Engine v2.6.0,版权所有 (c) 1998-2016 Zend Technologies Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2016,Zend Technologies

【问题讨论】:

看起来您已经采取了通常的步骤。是时候仔细检查一些基础知识了:您是否可能将 laravel 设置为使用另一种数据库类型、mssql 或 postgresql?服务器上是否有混合的 php 版本(我认为 ubuntu 14.04 默认使用 php5.x) 可能值得在 CLI 中执行 php -i 以确保它与基于 Web 的匹配。有时,您在 CLI 上获得的 PHP 版本可能与 apache 中的不同。 hmm...另一个想法:如果我正确理解该过程,则错误发生在 php cli 调用中。您在链接的问题中看到 leith 的答案了吗? php-cli使用了另一个ini文件,可能是pdo驱动没有激活 @Maramal 最好的办法是做which php 找到当前运行的那个,删除它并在您的/usr/bin 或其他路径目录中链接PHP 7 二进制文件。您当前的 CLI php 没有任何 PDO 驱动程序 @Maramal 尝试mv /usr/bin/php /usr/bin/php.old 然后ln -s /path/to/php/bin/php /usr/bin/php 不知道您在哪里安装了 PHP,尽管您可能需要查找它(phpinfo 可能会说它在哪里) 【参考方案1】:

作为替代解决方案,请确保您已安装 php7-mysql

尝试运行下面的命令

sudo apt install php7.0-mysql

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

sudo apt install php-mysql

【讨论】:

【参考方案2】:

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

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

一个不错的快速修复,希望这会有所帮助

【讨论】:

【参考方案3】:

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 将匹配您的网络服务器。

更新:

如this answer 中所述,如果您使用 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>

【讨论】:

我进行了更改,但我得到了同样的错误。我只想迁移我的数据库架构,它适用于我的 Vagrant VM,但不适用于我的 Aruba VPS。我安装了 Debian 8,以及最新的 php、mysql、phpmyadmin、composer、git,然后用 Dploy npm 包无缝部署了我的 laravel 项目。然后我因为gitignore在vps上做了一些改动,因为mysql我改了.env。然后起身跑了。一切看起来都很好。但是当我想将一个简单的表迁移到我的数据库中时,它会抛出一个与@Maramal 询问的错误相同的错误。你的解决方案不适合我。 which php 刚刚在 Windows 上为我工作。我用nginx 替换了wamp server,我可以清楚地看到它仍在使用wamp PHP。【参考方案4】:

我遇到了与您相同的情况。我确实解决了以下问题:

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 更改/s

**5) 重启网络服务器以应用更改

sudo systemctl 重启 apache2

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

php 工匠迁移

希望这对您有所帮助。

【讨论】:

【参考方案5】:

在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 并且可以正常工作! 谢谢Jignesh。只需要添加php-mysql扩展即可。 @Digvijay 你是对的 php-mysql 自动安装当前版本【参考方案6】:

您的数据库驱动程序丢失。解决问题

先安装驱动

对于 ubuntu:对于 mysql 数据库。

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

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

您也可以搜索驱动:

sudo apt-cache search drivername

【讨论】:

【参考方案7】:

你可以试试下面这些命令

php artisan cache:clear
php artisan config:clear  

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

【讨论】:

【参考方案8】:

好的,我曾经遇到过这个错误......我不知道为什么,但看起来在 php 7.3 中存在与驱动程序相关的问题,或者我所做的事情是切换回 php 7.2 并且一切正常...... .

【讨论】:

回滚到 php7.2 对我有用,也在我的终端上运行以下命令:sudo a2dismod php7.3; sudo a2enmod php7.2; sudo update-alternatives --set php /usr/bin/php7.1; sudo service apache2 restart【参考方案9】:
sudo apt install php7.2-pdo php7.2-mysql

【讨论】:

【参考方案10】:

清除工匠缓存

php artisan cache:clear

php artisan migrate:refresh

就是这样

【讨论】:

【参考方案11】:

实际上,我很确定您不知道您的 PHP - 版本并使用了错误的路径:

对于您的供应商 PHP 版本(sury.org 的 5.6),您将使用 PHP - 命令作为“/usr/bin/php”,但是当您使用不同的 PHP - 版本时,例如来自 Plesk 的版本,那么你有不同的路径:

/opt/plesk/php/5.2/bin/php -v
/opt/plesk/php/5.3/bin/php -v
/opt/plesk/php/5.4/bin/php -v
/opt/plesk/php/5.5/bin/php -v
/opt/plesk/php/5.6/bin/php -v
/opt/plesk/php/7.0/bin/php -v
/opt/plesk/php/7.1/bin/php -v

您的 PHP - 可能的其他 PHP 版本的命令(如果您从 https://launchpad.net/~ondrej/+archive/ubuntu/php 安装了 sury.org MAIN ppa PHP 版本,则为 7.0 和 7.1)将是:

/usr/bin/php7.0 -v
/usr/bin/php7.1 -v

使用“-m”选项字符串显示每个 PHP 版本的已安装模块,并使用“-i”选项字符串获取信息(示例):

/opt/plesk/php/7.0/bin/php -m
/opt/plesk/php/7.0/bin/php -i
or
/usr/bin/php7.0 -m
/usr/bin/php7.0 -i

要使用“composer”,您当然也可以使用 PHP 可执行文件的完整路径(示例):

/opt/plesk/php/7.0/bin/php composer-setup.php
or
/usr/bin/php7.0 composer-setup.php

额外的“作曲家” - 然后是命令:

/opt/plesk/php/7.0/bin/php composer.phar AND-ADDITIONAL-STRINGS/OPTIONS-TO-BE-INCLUDED
or
/opt/plesk/php/7.0/bin/php composer.phar AND-ADDITIONAL-STRINGS/OPTIONS-TO-BE-INCLUDED

【讨论】:

以上是关于PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的 Laravel 5.4。 Forbidden 您无权访问此服务器上的 /

用于删除sql行的按钮:Laravel 5.4上的BadMethodCallException

php Laravel 5.4组件和插槽

php [Laravel - 自定义错误消息] Laravel 5.4其他登录条件 - 添加自定义错误消息。 #All #Script #Laravel #Php

LARAVEL 5.4:ValidatePostSize.php 中的 PostTooLargeException(第 24 行)

Laravel 5.4 上 Manager.php 第 139 行中的 FatalErrorException