使用Laravel时,运行"php artisan migrate"命令时出现"[PDO Exception] Could not find driver"错误。

61

我在安装Laravel时遇到了麻烦,但最终还是成功了并进入了下一个阶段。我使用了生成器并创建了我的数据表迁移。 但当我输入最后一个命令

php artisan migrate

出现了PDO异常 - 找不到驱动程序。

       'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
            'database'  => 'database',
            'username'  => 'root',
            'password'  => '',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

这是我的config/database.php配置文件。

我在stackoverflow和laravel论坛上进行了搜索,人们建议这是PDO的问题,而不是artisan或者php的问题 - 我遵循了这些建议,比如添加

extension=pgsql.so
extension=pdo_pgsql.so

在php.ini中。

没有积极的结果。它总是说[PDOException]could not find driver.

有人能帮忙解决吗。

我使用的环境是:Mac、laravel 4、MAMP PRO和php 5.4.4。


1
你是否有pdo_mysql.so扩展? - Mariano Córdoba
是的,我有...抱歉只粘贴了2个扩展名,但我确实有extension=imap.so extension=yaz.so extension=mcrypt.so extension=gettext.so extension=pgsql.so extension=pdo_pgsql.so extension=pdo_mysql.so - Vamshi Vangapally
你确定该模块已启用吗?在LAMP中,可以使用sudo a2enmod <module>命令来启用模块。查看你的phpinfo()是否启用了该驱动程序。 - Mariano Córdoba
phpinfo() 中显示 PDO 驱动程序已启用,包括 sqlite、pgsql 和 mysql! - Vamshi Vangapally
1
由于您正在使用CLI,请尝试运行“php -i | less”并查看是否实际加载了PDO扩展。如果没有,则需要修改CLI使用的php.ini文件,这与Apache使用的不同。它通常位于与PHP exe相同的目录中,但这是在Windows上,不确定在Mac上会在哪里,但是这个人可以找到https://dev59.com/THE85IYBdhLWcg3wgDlI - RiggsFolly
显示剩余2条评论
27个回答

98

你可以使用

sudo apt-get install php7-mysql
或者
sudo apt-get install php5-mysql
或者
sudo apt-get install php-mysql

这对我起作用了。


2
sudo apt-get install php-mysql 这个对我有用。谢谢伙计。 - Niroj Adhikary
2
如果您不确定应该安装哪个驱动程序,请使用 php --version 命令检查您的 PHP 版本,并安装相应的驱动程序。 - The Unknown Dev
1
当我运行当前版本的Ubuntu时,三年后,我也发现这个解决方案解决了我的问题。apt-cache search mysql | grep php向我展示了我所需的软件包名称现在是php7.2-mysql...我安装了它,问题就消失了。 - Mike Robinson
我在WSL中使用一个Docker容器,当我在WSL中调用php artisan test时,它会出现“没有驱动程序”的错误,但是当我在容器内调用它时,它可以正常工作。在WSL上安装php-mysql(最初运行php artisan test的地方)解决了这个问题。谢谢! - Carlos Salles

28

您需要专门启用pdo_mysql插件。假设您使用的是标准PHP安装,则通常只需将以下内容添加到您的PHP.ini文件中:

extension=pdo_mysql.so

你需要确保该文件存在于扩展目录中。

添加pdo_pgsql.so并不能解决问题,因为那是为PostgreSQL准备的。

此外,你应该确保在修改PHP ini文件之后重新启动Web服务器,否则可能无法反映更改。


我该如何检查扩展目录中是否存在该文件? - Vamshi Vangapally
通常情况下,您的扩展目录应该是您安装PHP的位置下的./ext文件夹,例如在Windows上,默认情况下使用PHP的安装程序包,它位于“C:\Program Files (x86)\PHP\ext”。 - JaTochNietDan
extension_dir ="/Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525/" 指向此文件夹,该文件夹包含所有所需的 .so 文件。 - Vamshi Vangapally
在修改了PHP ini文件后,您是否重新启动了Web服务器? - JaTochNietDan
在设置配置后,请确保重新启动Web服务器sudo service apache2 restart。 - Rick

20

这对我起作用:

sudo apt-get install php5-sqlite

我安装了适用于php5的sqlite,然后再次运行php artisan migrate命令,一切完美无误。


在尝试在主要的Laravel框架上运行phpunit时,我解决了我的问题。 - Zane
我不明白为什么安装php5-sqlite会导致PDO mysql正常工作。谢谢! - tombrown52
1
最近的Ubuntu版本中不包含此软件包。对于16.04,请运行:sudo apt-get install php-sqlite3 - garrettendi

16

在这里遇到了同样的问题,结果发现这是因为命令行中的 PHP 使用不同于浏览器版本的 php.ini 文件,这就是为什么在浏览器中查看 phpinfo() 时它看起来已正确加载扩展。

根据此答案,您只需运行:

php --ini
在命令行中,输入以下命令,它会告诉你当前加载的 php.ini 文件的路径(实际上可能是一个位于与常规 php.ini 文件相同位置的 php-cli.ini 文件)。
找到后,请使用所需的 pdo 扩展进行修改(在这种情况下为 MySQL):
extension=pdo_mysql.so

或者,对于使用某种WAMP服务器的Windows上的任何其他用户,它可能看起来像这样:

extension=php_pdo_mysql.dll

6

您必须安装最新版本的php mysql,在我的情况下我正在安装php7.1-mysql

尝试这样做

sudo apt-get install php7.1-mysql

我正在使用最新版本的Laravel


6
我认为你错过了php5的mysql驱动程序。 执行以下命令:
sudo apt-get install php5-mysql
/etc/init.d/php5-fpm restart

5

您缺少PDO驱动程序。

首先安装驱动程序。

对于Ubuntu:mysql数据库。

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

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

您也可以搜索驱动程序:

sudo apt-cache search drivername

Then Run the cmd php artisan migrate

当我运行当前的Ubuntu时,四年后,我发现这个建议完美地解决了我的问题。 - Mike Robinson

4
请检查您的Laravel .env文件。确保DB_CONNECTION=mysql,否则它将无法与MySQL一起工作。它会尝试加载其他东西。

3
这是我使用的方法:(对于pgsql:请使用“pgsql”代替“mysql”)
步骤1)
sudo apt-get install php-mysql

第二步)

php artisan config:clear

步骤三)

php artisan config:cache

第四步)
然后重启您的服务器,再次生成密钥并进行迁移,完成


3

我在使用PostgreSQL时遇到了这个错误,解决方法如下:

sudo apt-get install php7.1-pgsql

您只需使用已安装的PHP版本,我的是7.1。这可以解决PostgreSQL的问题。


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