PHP 7.1.3连接Windows 10下MySQL 5.7.31失败:找不到驱动求助
嘿,我之前把PHP5升级到7的时候也碰到过几乎一模一样的驱动问题,结合你的情况,给你几个实打实的排查方向:
先确认扩展文件是否真的存在
别只盯着php.ini里的配置,得去对应的扩展目录里找实际文件:- Linux系统下,找到PHP安装目录的
ext文件夹(比如/usr/local/php7/ext),检查有没有mysqli.so和pdo_mysql.so; - Windows系统则看
php/ext文件夹里有没有php_mysqli.dll和php_pdo_mysql.dll。
如果文件缺失,那就是PHP7安装时没装上对应扩展: - Linux用包管理器补装就行,比如
apt-get install php7.4-mysql(记得替换成你的PHP7具体版本); - Windows要下载和你PHP版本、架构(x86/x64)、线程安全(TS/NTS)完全匹配的扩展包,放到ext目录里。
- Linux系统下,找到PHP安装目录的
确认你修改的是Apache实际加载的php.ini
这是很多人踩过的坑:改了一个php.ini,但Apache加载的是另一个!
新建一个phpinfo.php文件,内容写<?php phpinfo(); ?>,访问它找到「Loaded Configuration File」这一行,这才是你真正需要修改的配置文件。同时在phpinfo里搜索mysqli和pdo_mysql,如果看不到对应的模块信息,说明扩展确实没加载成功。验证extension_dir路径的正确性
在phpinfo里查看extension_dir的实际生效值,和你设置的路径对比:- Linux建议用绝对路径,比如
/usr/local/php7/ext; - Windows如果用相对路径,要确保是Apache运行目录的相对路径,保险起见直接用绝对路径(比如
C:\php\ext)。
注意:PHP7的扩展目录结构和PHP5可能不一样,别直接沿用旧版本的路径。
- Linux建议用绝对路径,比如
区分命令行和Apache的PHP配置
有时候命令行PHP能加载扩展,但Apache不行,说明两者用的配置文件不一样。在终端运行php -m,看看输出里有没有mysqli和pdo_mysql:- 如果命令行有、Apache没有,就把命令行的php.ini配置同步到Apache加载的那个文件里;
- 如果命令行也没有,那就是全局的扩展加载问题,回到第一步检查文件和配置。
Linux下检查扩展文件权限
要是扩展文件存在但Apache加载不了,大概率是权限不够。给扩展文件加上可读权限:chmod 644 /usr/local/php7/ext/mysqli.so chmod 644 /usr/local/php7/ext/pdo_mysql.so或者把文件所属用户改成Apache的运行用户(比如www-data):
chown www-data:www-data /usr/local/php7/ext/mysqli.so确保Apache完全重启
别只点个“重启”按钮就完事,Linux下用systemctl restart apache2(Systemd系统)或者service apache2 stop && service apache2 start,Windows则在服务列表里完全停止再启动Apache,确保配置彻底生效。
内容的提问来源于stack exchange,提问作者adig14

