- ```html
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 的扩展目录里压根不存在。你没法加载一个不存在的模块。直接说结论:PHP 7.0 之后,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 扩展:未安装”,然后给你一个按钮“安装”。你点了之后,它其实装的是
``` 顶: 4598踩: 68mysqli。面板的文案没跟上 PHP 的变化,别被它带偏。看 phpinfo 永远比看面板准。






评论专区