<p>phpMyAdmin 4.x 及更早版本因依赖已移除的 mysql_* 函数,无法在 PHP 8.1+ 正常运行;必须升级至 5.2+ 版本并手动迁移 config.inc.php 配置,否则将出现致命错误或功能异常。</p>
PHP 8.1+ 中 mysql_connect 类函数已被移除,但 phpMyAdmin 还在用旧扩展
phpmyadmin 出现 deprecated: mysql_connect(): the mysql extension is deprecated and will be removed in the future 这类警告,根本原因不是 php 配置错了,而是你正在用新版 php(尤其是 8.1+)跑一个没适配的 phpmyadmin 版本。老版本 phpmyadmin(如 4.x)依赖已废弃的 mysql_* 函数,而 php 7.0 就已弃用,8.0 起彻底删除 —— 所以哪怕你调低了 error_reporting,底层调用本身就会触发致命错误或空白页。
- 检查当前 phpMyAdmin 版本:
cat /path/to/phpmyadmin/VERSION,若显示4.9.x或更低,基本确定是兼容性问题 - PHP 8.0+ 环境下,
mysql_*函数已不存在,extension=php_mysql.dll(Windows)或extension=mysql.so(Linux)这类配置直接失效甚至报错 - 强行屏蔽警告(比如改
error_reporting)只是掩耳盗铃:页面可能卡在登录页、无法加载数据库列表、执行 SQL 时白屏
升级 phpMyAdmin 到 5.2+ 是唯一可靠解法
phpMyAdmin 5.0 开始全面切换到 mysqli 和 PDO,5.2+ 已官方支持 PHP 8.2。别试图打补丁或回退 PHP 版本——维护成本远高于升级本身。
- 下载地址必须认准官方:
https://www.phpmyadmin.net/downloads/,避免第三方打包版(常混入旧版或修改过的config.inc.php) - 升级前备份好
config.inc.php,新版不再自动读取旧配置;特别注意$cfg['Servers'][$i]['auth_type']和$cfg['blowfish_secret']这两项必须手动迁移 - 如果用的是 Docker,别改镜像里的
/var/www/html/phpmyadmin,直接换镜像标签,例如从citec/phpmyadmin:4.9换成phpmyadmin/phpmyadmin:5.2 - Apache/Nginx 需确认
php-mysql或php-mysqli已启用:php -m | grep -i mysql应输出mysqli和pdo_mysql
error_reporting 和 display_errors 只能临时藏错,不能治病
有人在 php.ini 里把 error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE,或者在 config.inc.php 开头加 error_reporting(0)。这会让警告消失,但掩盖了更严重的问题:
- PHP 8.1+ 下,
mysql_connect()调用会直接抛出Fatal error: Uncaught Error: Call to undefined function mysql_connect(),此时error_reporting设置完全无效 - 即使降级到 PHP 7.4,关闭警告后,连接失败、查询无返回、权限校验跳过等静默故障会更难定位
- 某些共享主机禁止修改
php.ini,你在.htaccess里写php_flag display_errors off只影响 Apache 模块模式,CLI 或 FPM 下不生效
确认是否真解决了?看三处日志和行为
升级完别急着点“服务器”页签,先验证底层通路是否真正打通:
- 打开浏览器开发者工具 → Network 标签,刷新 phpMyAdmin 页面,找
ajax.js.php或import.php请求,状态码应为 200,响应体不应含Deprecated或Call to undefined function - 登录后点「新建」→「数据库」,输入名点创建,成功后立刻看 PHP 错误日志:
tail -f /var/log/php/error.log(路径依环境而定),不应出现任何 mysql 相关 warning/fatal - 执行一条简单 SQL,如
SELECT VERSION();,结果栏上方应显示类似MySQL 服务版本:8.0.33,而不是空、报错或卡住
最易被忽略的是:phpMyAdmin 升级后,如果还连着旧的 config.inc.php,它可能悄悄 fallback 到 controluser 认证模式,而该用户权限不足,导致“看起来能进首页,但点任何数据库都 403”。这时候错误不在 PHP 层,而在 MySQL 的用户权限配置里。
立即学习“PHP免费学习笔记(深入)”;


















