PHP 8.3 下 phpMyAdmin 报 Call to undefined function 错误,主因是旧版(如5.2.x)仍调用已被彻底移除的 mysql_* 函数,或 mysqli 扩展未启用;必须升级至 phpMyAdmin 5.3.0+ 并确保 extension=mysqli 在对应 php.ini 中启用且重启服务。
php 8.3 环境下 phpmyadmin 报 call to undefined function 错误,基本可以锁定是函数被移除或扩展未启用——不是代码写错了,而是环境没配对。
phpMyAdmin 5.x 在 PHP 8.3 中调用的函数已被废弃或删除
phpMyAdmin 5.2.1 及更早版本仍残留对 mysql_connect()、mysql_query() 等旧 MySQL 扩展函数的调用(哪怕只是条件判断里的存在性检查)。这些函数早在 PHP 7.0 就被彻底移除,PHP 8.3 不仅不提供,连兼容层都不留。一旦代码路径走到这类判断分支,就会直接触发 Fatal error: Call to undefined function mysql_connect()。
这不是拼写错误,也不是没引入文件,而是函数本身在 PHP 8.3 的二进制里根本不存在。
- 检查报错堆栈里出现的函数名,大概率是
mysql_*或mysqli_*相关(注意:后者是正常扩展,前者是已删的旧版) - phpMyAdmin 5.2.x 要求 PHP ≥ 7.2,但官方明确不保证兼容 PHP 8.3+;真正支持 PHP 8.3 的稳定版是 phpMyAdmin 5.3.0+(2025 年底发布)
- 别信“降级到 8.2 就行”——PHP 8.2 同样不带
mysql_*,能跑只是因为旧版 phpMyAdmin 没走到那个分支,属于侥幸
mysqli 扩展未启用或配置错位
即使你手动升级了 phpMyAdmin 版本,Call to undefined function mysqli_connect() 这类报错说明底层依赖没起来。PHP 8.3 默认不启用任何数据库扩展,必须显式开启。
- 运行
/www/server/php/83/bin/php -m | grep mysqli(路径按实际 PHP 版本调整),确认输出含mysqli - 检查对应 PHP 版本的
php.ini(不是面板首页显示的那个,而是/www/server/php/83/etc/php.ini),确保有未注释的行:extension=mysqli - 重启 phpMyAdmin 对应的 PHP-CGI 进程:
killall -9 php-cgi && /etc/init.d/bt restart,否则改了 ini 也不生效 - 宝塔中多个 PHP 版本共存时,phpMyAdmin 只认自己绑定的那个 PHP 实例的配置,别改错文件
宝塔面板里 phpMyAdmin 绑定的 PHP 版本和你认为的不一致
面板首页显示“当前 PHP 版本:8.3”,不代表 phpMyAdmin 就跑在它上面。宝塔给 phpMyAdmin 分配的是独立 PHP 实例,路径藏在进程里。
立即学习“PHP免费学习笔记(深入)”;
- 执行
ps aux | grep phpmyadmin,找类似/www/server/php/82/bin/php-cgi的路径——版本号就在路径末尾数字里(如82表示 PHP 8.2) - 如果看到的是
82,但你装的是 PHP 8.3,说明重装 phpMyAdmin 时脚本自动 fallback 到了旧版 PHP,需手动指定:/www/server/panel/pytools/phpmyadmin.py install --php-version=83 - 重装后务必检查
/www/server/phpmyadmin/下的index.php开头是否包含#!/usr/bin/env php或硬编码调用路径,有些老包会锁死 PHP 二进制
最易被忽略的一点:PHP 8.3 的 error_reporting 默认值比 8.2 更激进,某些原本被静默忽略的扩展缺失问题,现在直接升为 Fatal。不要只盯着报错函数名,先确认 mysqli 是否真加载成功,再查 phpMyAdmin 版本是否兜得住这个 PHP 大版本。



















