需启用 mysqli 扩展:Linux 用 sudo apt install php8.1-mysql(版本匹配)并重启 Web 服务;Windows 解除 php.ini 中 extension=mysqli 注释;Mac 用 brew reinstall php@8.1 --with-mysql 并手动配置 php.ini。
PHP 报错 Call to undefined function mysqli_connect() 怎么办
这是典型的 php 缺失 mysqli 扩展导致的致命错误,不是代码写错了,而是环境没配好。只要扩展没启用,哪怕只调用一次 mysqli_connect(),就会直接崩。
- 先确认是否真没加载:运行
php -m | grep mysqli(Linux/macOS)或php -m全量查看 Windows 命令行输出,找有没有mysqli - 别急着重装 PHP——90% 的情况是配置文件里注释掉了扩展,或者扩展文件路径不对
- Windows 用户重点查
php.ini里这行是否取消注释:extension=mysqli(PHP 8.0+ 可能是extension=mysqli.dll) - Linux 用户如果用包管理器安装(如 apt),要额外装
php-mysql或php-mysqli包,光装php-cli不够
为什么 mysql_connect() 不能用了,非得换 mysqli
mysql_connect() 在 PHP 7.0 已被移除,不是“不推荐”,是彻底没了。继续用只会报 Fatal error: Uncaught Error: Call to undefined function mysql_connect()。这不是兼容性问题,是版本断层。
-
mysqli是官方维护的 MySQL 接口,支持面向对象和过程式两种写法,也支持预处理、多语句、事务等现代特性 - 如果你老项目还用
mysql_*函数,升级 PHP 时必须批量替换成mysqli_*或改用 PDO - 注意:
mysqli和pdo_mysql是两个独立扩展,启用一个不代表另一个自动可用
Ubuntu/Debian 下装 mysqli 扩展的实际步骤
别信“重装 PHP 就行”这种模糊说法,具体命令取决于你用的 PHP 版本和安装方式。
- 查当前 PHP 版本:
php -v(比如输出PHP 8.1.2) - 装对应扩展包:
sudo apt install php8.1-mysql(版本号必须严格匹配) - 重启 Web 服务:
sudo systemctl restart apache2或sudo systemctl restart php8.1-fpm(取决于你是 Apache 还是 Nginx + FPM) - 验证:新建
info.php放<?php phpinfo(); ?>,浏览器打开看是否有mysqli模块区块
Mac 上用 Homebrew 装完还是找不到 mysqli?
Homebrew 默认不会自动修改 php.ini,即使扩展文件已存在,PHP 仍可能跳过加载。
- 先定位生效的
php.ini:php --ini看 “Loaded Configuration File” 路径 - 编辑该文件,在
[extensions]段落末尾加一行:extension=mysqli - 确认扩展文件存在:
ls /usr/lib/php/extensions/no-debug-non-zts-*/mysqli.so(路径随 PHP 版本浮动) - 如果提示
mysqli.so找不到,可能是 Homebrew 安装时没编译这个扩展——重装带选项:brew reinstall php@8.1 --with-mysql(新版 Homebrew 可能需手动指定)
最常被忽略的一点:CLI 和 Web SAPI 的 PHP 配置文件经常不同。你在终端跑 php -m 看到 mysqli,不代表 Apache 或 Nginx 下的 PHP 也加载了它。务必分开验证。
立即学习“PHP免费学习笔记(深入)”;



















