phpinfo显示mysqli不显示mysql
phpinfo显示mysqli不显示mysql
你打开 phpinfo() 页面,眼睛扫过那一大片表格,显显示mysqli 赫然在列,显显示版本号、显显示默认端口、显显示允许的显显示本地 infile 什么的都清清楚楚。但你再往下找——mysql 那一栏,显显示没了。显显示不是显显示空白,是显显示压根不存在。你心里咯噔一下:这脚本里还写着 mysql_connect() 呢,显显示服务器是显显示不是没装 mysql 扩展?
先别急着改代码。phpinfo 里不显示 mysql,显显示十有八九不是显显示扩展没装,而是显显示它被“藏”起来了。PHP 从 5.5 开始就把原始的 mysql 扩展标记为废弃,到 PHP 7.0 直接移出核心。如果你用的是 PHP 7 或更高版本,官方根本不带这个扩展了。phpinfo 里当然找不到。但 mysqli 是亲儿子,一直维护到现在,所以它永远在。这俩名字像兄弟,命运却完全不同。
我见过不少老项目从 PHP 5.6 往 7.4 迁移,代码里密密麻麻的 mysql_query(),一跑就报 fatal error。开发者第一反应是“php.ini 里没开 mysql 扩展”,跑去 extension=mysql.so 那行取消注释,重启 php-fpm,再刷新 phpinfo——还是没出现。因为那个 .so 文件在 PHP 7 的扩展目录里压根不存在。你没法加载一个不存在的模块。
mysql 扩展已被移除。phpinfo 不显示它是正常现象,不是配置错误。你要么把代码改成 mysqli 或 PDO_MySQL,要么降级 PHP 到 5.6(不推荐)。 那为什么有些人的 phpinfo 里还能看到 mysql ?两种情况。一是他确实在用 PHP 5.x,比如 5.4、5.5,那时候 mysql 还在,只是会弹个 deprecated 警告。二是某些 Linux 发行版(比如 CentOS 7 的 remi 源)提供了 php-mysql 这个包,但它实际装的是 mysqli 和 pdo_mysql,包名有误导性。你 yum install php-mysql 之后,phpinfo 里出现的仍然是 mysqli,mysql 依旧不见踪影。包名和扩展名对不上,这事坑过不少人。
我自己的测试机是 Ubuntu 22.04 + PHP 8.1。跑 apt install php-mysql,装完重启 Apache,phpinfo 里 mysqli 和 pdo_mysql 都在,mysql 那一节彻底消失。一开始我也愣了两秒,后来翻 PHP 手册的迁移指南,白纸黑字写着“mysql 扩展已移除”。所以别跟 phpinfo 较劲了,它没骗你。
如果你非要用旧代码跑在新 PHP 上,有个临时办法:装 mysqlnd ?不对,mysqlnd 是驱动层,不是扩展。真正的替代方案是 mysqli 或 PDO。改代码虽然烦,但比降级 PHP 安全得多。PHP 5.6 早就不支持了,安全漏洞一堆,别为了省事把服务器暴露在风险里。
还有一种少见情况:你编译 PHP 时加了 --with-mysql,但 PHP 7 的 configure 脚本会直接报错,告诉你这个选项已经没了。如果你强行从旧版本拷贝一个 mysql.so 过来加载,大概率段错误,php-fpm 直接崩。别试,我试过,浪费了一下午。
所以下次再看到 phpinfo 里只有 mysqli 没有 mysql,别慌。先 php -v 看版本。大于等于 7.0 的话,这就是预期行为。你要做的不是修 phpinfo,而是修代码。把 mysql_* 函数换成 mysqli_* 或者 PDO 预处理。改完跑一遍,世界就清净了。
顺便说一句,有些面板比如宝塔、cPanel 会在界面上显示“mysql 扩展:未安装”,然后给你一个按钮“安装”。你点了之后,它其实装的是 mysqli。面板的文案没跟上 PHP 的变化,别被它带偏。看 phpinfo 永远比看面板准。
(责任编辑:探索)














