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 - 自定义错误消息] Laravel 5.4其他登录条件 - 添加自定义错误消息。 #All #Script #Laravel #Php
LARAVEL 5.4:ValidatePostSize.php 中的 PostTooLargeException(第 24 行)