php artisan migrate throwing [PDO Exception] 找不到驱动程序 - 使用 Laravel

Posted

技术标签:

【中文标题】php artisan migrate throwing [PDO Exception] 找不到驱动程序 - 使用 Laravel【英文标题】:php artisan migrate throwing [PDO Exception] Could not find driver - Using Laravel 【发布时间】:2014-04-23 04:53:59 【问题描述】:

我在安装 laravel 时遇到了不好的体验。但是,我能够这样做并进入下一个级别。我使用了生成器并创建了我的迁移。 但是当我输入最后一个命令时

php artisan migrate

它抛出 PDOException - 找不到驱动程序。

       '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 中的配置。

我尝试在 *** 和 laravel 论坛上搜索,人们认为这是 PDO 问题,而不是工匠或 php 的问题 - 我遵循了这些建议,例如添加

extension=pgsql.so
extension=pdo_pgsql.so

在 php.ini 中

没有阳性结果。它总是说[PDOException]could not find driver.

有人可以帮忙解决这个问题吗?

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

【问题讨论】:

您有pdo_mysql.so 分机吗? 是的,我有...抱歉只粘贴了 2 个扩展名,但我确实有 extension=imap.so extension=yaz.so extension=mcrypt.so extension=gettext.so extension=pgsql.so extension =pdo_pgsql.so 扩展=pdo_mysql.so 您确定该模块已启用吗?在 LAMP 中,可以使用 sudo a2enmod <module> 启用模块。如果驱动程序已启用,请查看您的 phpinfo() phpinfo() - 它表明sqlite、pgsql、mysql的PDO驱动程序已启用! 当您使用 CLI 时,请尝试运行 php -i | less 并查看是否实际加载了 PDO 扩展。如果不是,那么您将需要修改 CLI 使用的 php.ini 文件,该文件与 Apache 使用的不同。它通常与 PHP exe 位于同一目录中,但那是在 windows 上,不确定它在 mac 上的位置。但是这家伙确实***.com/questions/2750580/… 【参考方案1】:

你可以使用

sudo apt-get install php7-mysql

sudo apt-get install php5-mysql

sudo apt-get install php-mysql

这对我有用。

【讨论】:

sudo apt-get install php-mysql 这对我有用。谢谢老哥 如果您不确定是哪个,请使用php --version检查您的PHP版本并安装相应的驱动程序。 三年后运行当前版本的Ubuntu时,我也发现这个解决方案解决了我的问题。 apt-cache search mysql | grep php 告诉我我需要的包名现在是php7.2-mysql ...我安装了它,问题就消失了。 我使用的是 WSL,里面有一个 docker 容器,当我在 wsl 中调用 php artisan test 时,它给出了无驱动程序错误,但是当我在容器中调用它时,它可以工作。在wsl(我最初运行php artisan test)上安装php-mysql可以解决问题。谢谢大佬!【参考方案2】:

这对我有用:

sudo apt-get install php5-sqlite

这为php5安装了sqlite,然后我再次运行php artisan migrate命令并完美运行。

【讨论】:

修复了我在 Laravel 主框架上尝试运行 phpunit 时遇到的问题。 我不明白为什么,但是安装 php5-sqlite 导致 PDO mysql 正常工作。谢谢! 最新版本的 Ubuntu 不包含此软件包。对于 16.04,运行:sudo apt-get install php-sqlite3【参考方案3】:

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

extension=pdo_mysql.so

您需要确保此文件存在于扩展目录中。

添加 pdo_pgsql.so 无济于事,因为那是针对 PostgreSQL 的。

此外,您应确保在对 PHP ini 文件进行更改后重新启动网络服务器,否则更改可能不会反映。

【讨论】:

如何检查该文件是否存在于扩展目录中? 一般来说,你的扩展目录是你在 ./ext 中安装 PHP 的地方,例如在 Windows 上,默认使用 PHP 的安装程序包是 C:\Program Files (x86)\PHP\ext extension_dir ="/Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525/" 指向这个并且该文件夹包含所有必需的 .so 文件 在对 PHP ini 文件进行适当的更改后,您是否重新启动了网络服务器? 设置好配置后确保重启网络服务器 sudo service apache2 restart【参考方案4】:

在这里遇到了同样的问题,原来这是因为命令行中的 PHP 使用了与浏览器版本不同的 php.ini 文件,这就是为什么当您查看 @987654323 时看起来它正在正确加载扩展名的原因@ 在浏览器中。

按照this answer,你只需要运行:

php --ini

在命令行中,它将告诉您当前加载的php.ini 的路径(实际上可能是一个php-cli.ini 文件,与您的常规php.ini 文件位于同一位置)。

找到后,使用所需的 pdo 扩展对其进行修改(在本例中为 MySQL):

extension=pdo_mysql.so

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

extension=php_pdo_mysql.dll

【讨论】:

兄弟,非常感谢这对我也有用 - 非常感谢 Leith【参考方案5】:

我想你错过了 php5 的 mysql 驱动程序。 执行以下命令:

sudo apt-get install php5-mysql
/etc/init.d/php5-fpm restart

【讨论】:

【参考方案6】:

请同时检查您的 Laravel .env 文件。确保DB_CONNECTION=mysql,否则它不适用于 MySQL。它试图加载其他内容。

【讨论】:

【参考方案7】:

您缺少 PDO 驱动程序。

先安装驱动

对于 ubuntu:对于 mysql 数据库。

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

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

您也可以搜索驱动:

sudo apt-cache 搜索驱动程序名称

Then Run the cmd php artisan migrate

【讨论】:

四年后在运行当前的Ubuntu时,发现这个建议完美解决了我的问题。【参考方案8】:

您必须安装最新版本的php mysql 就我而言,我是安装php7.1-mysql

试试这个

sudo apt-get install php7.1-mysql

我使用的是最新版本的 laravel

【讨论】:

【参考方案9】:

有同样的问题,只是想通了,网站在 MAMP 的 php 下运行,但是当你调用命令时,它运行 mac(如果没有修改 bash 路径)。当 mac 没有这些扩展时,你会遇到问题。

运行 php -i 找出加载的扩展,然后安装那些你错过的。或运行'/Applications/MAMP/bin/php/php5.3.6/bin/php artisan your command'来使用MAMP的

【讨论】:

/Applications/MAMP/bin/php/php5.5.26/bin/php artisan migrate 这个命令对我有用。 tnx 很多:*【参考方案10】:

我也遇到了同样的错误 --> "[PDOException] 找不到驱动程序“

之后我使用了很多命令,但没有得到任何帮助

最后我使用了以下命令,解决了我的问题。

sudo apt-get install php5-sqlite

【讨论】:

太好了! Mac 呢?【参考方案11】:

Laravel 测试 使用 sqlite 需要 php pdo sqlite 驱动程序

适用于 Ubuntu 14.04

sudo apt-get install php5-sqlite
sudo service apache2 restart

在 ubuntu 16.04 中没有php5-sqlite

sudo apt-get install php7.0-sqlite
sudo service apache2 restart

【讨论】:

【参考方案12】:

我在 PostgreSQL 中遇到了这个错误,解决方案是:

sudo apt-get install php7.1-pgsql

你只需要使用你安装的PHP版本,我的是7.1。 这已经解决了 PostgreSQL 的问题。

【讨论】:

【参考方案13】:

我正在取消 ubuntu 14.04

下面的命令为我解决了这个问题。

sudo apt-get install php-mysql

在我的情况下,在将我的 php 版本从 5.5.9 更新到 7.0.8 后,我收到了这个错误,包括另外两个错误。

错误:

    laravel/framework v5.2.14 需要 ext-mbstring * -> 您的系统中缺少请求的 PHP 扩展 mbstring。

    phpunit/phpunit 4.8.22 需要 ext-dom * -> 您的系统中缺少请求的 PHP 扩展 dom。

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

解决方案:

我安装了这个包,我的问题就消失了。

sudo apt-get install php-mbstring

sudo apt-get install php-xml

sudo apt-get install php-mysql

【讨论】:

【参考方案14】:

我在 debian 上遇到了这个问题。问题是,我将 dotdeb 存储库用于更新的 PHP 包。出于某种原因,它将 php cli 更新到 7.0,而 web php 二进制文件仍然是 php 5.6。我使用this answer 将php命令行二进制链接到5.6版本,如下所示:

$ sudo ln -sfn /usr/bin/php5 /etc/alternatives/php

【讨论】:

链接的答案在我的 debian 9 中帮助了我,我需要更新 php5.6 的替代品。谢谢【参考方案15】:

这对我有用:(对于 pgsql:使用 'pgsql' 而不是 'mysql')

步骤 1)

sudo apt-get install php-mysql

步骤 2)

php artisan config:clear

步骤 3)

php artisan config:cache

第 4 步) 然后重启你的服务器,再次生成密钥并迁移它,就完成了

【讨论】:

【参考方案16】:

首先像这样检查你的 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

【讨论】:

【参考方案17】:

供未来的搜索者使用。 在 FreeBSD 上尝试下一个

pkg_info | grep php5-pdo_mysql

如果您看到返回的空行,请执行以下操作:

cd /usr/ports/databases/php5-pdo_mysql

然后安装

make install clean

然后只需重新启动您的 apache 即可完成

例如sudo /usr/local/etc/rc.d/apache22 restart

【讨论】:

【参考方案18】:

通过这个命令安装

sudo apt-get install php5-gd

这对我有用。

【讨论】:

【参考方案19】:

就我而言,我不知道 Apache 运行的 PHP 与 CLI 运行的 PHP 不同。如果在 httpd.conf 配置期间您指定了一个 PHP 模块,而不是您的 CLI 使用的默认模块,则可能会出现这种情况。

【讨论】:

【参考方案20】:

我找到了解决这个错误的正确方法!您没有安装任何数据库或此文件中的默认数据库 config/database.php 设置为类似这样的其他数据库

'default' => 'sqlite',
'default' => env('DB_CONNECTION', 'sqlite'), //laravel 5.2

更改您已安装的默认值或安装默认的数据库!在我将该行更改为此之后,我已经安装了 mysql 和 php artisan migrate:

'default' => 'mysql',
'default' => env('DB_CONNECTION', 'mysql'), //laravel5.2

【讨论】:

【参考方案21】:

我也遇到了同样的错误 --> "[PDOException] 找不到驱动程序“

我意识到 php 指向 /usr/bin/php 而不是lampp /opt/lampp/bin/php 所以我简单地创建了 和别名

别名 php="/opt/lampp/bin/php"

还必须更新 .env 文件以确保更新数据库访问凭据。

你猜怎么着,它成功了!

【讨论】:

【参考方案22】:

如果您使用的是 Laravel 5.x,并且错误来自尝试修改列的属性,则错误可能来自缺少先决条件。

试试这个:

 composer require doctrine/dbal

然后尝试运行您的迁移。

从这里: https://laravel.com/docs/master/migrations#modifying-columns

【讨论】:

【参考方案23】:

如果你使用的是基于 arch 的系统,比如 manjaro

只需使用

sudo pacman -S php-sqlite

重启你的httpd

systemctl restart httpd

【讨论】:

【参考方案24】:

对于那些发现这篇文章的 windows 10 和 WAMP 用户,我有一个解决方案。Please go visit this link。它对我有用,并且很难找到解决方案,但我希望它可能对其未来的其他人有所帮助。

【讨论】:

【参考方案25】:

假设您使用 virtual box、vagrant 等进行了正常安装。 这可能发生在新人身上。 PHP 可以安装在您的 PC 上,但您的 laravel 项目的所有 PHP 模块都在您的 VM 上 因此,要访问您的虚拟机,请转到您的 homestead 文件夹并输入: 流浪的ssh

然后去你的项目路径并执行 php artisan migrate。

【讨论】:

【参考方案26】:

这是 MAC 和 MAMP 的问题。 尝试在您的 .env 文件中添加:

DB_SOCKET= /Applications/MAMP/tmp/mysql/mysql.sock

对我有用

【讨论】:

以上是关于php artisan migrate throwing [PDO Exception] 找不到驱动程序 - 使用 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

执行 php artisan migrate:install报错

php artisan migrate 命令迁移错误

为啥 PHP artisan migrate 命令显示错误?

Lavarel 执行:php artisan migrate时报错

php artisan migrate 抛出 PDOException

laravel php artisan migrate 错误(超时)