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 命令显示错误?
Lavarel 执行:php artisan migrate时报错