必须手动启用mysqli扩展并确认cli与web环境使用同一php.ini:先用php --ini和phpinfo()定位配置路径,再取消extension=mysqli注释,最后重启对应服务验证。

phpEnv 默认不自动启用 mysqli 扩展,直接写 new mysqli() 会报 Fatal error: Uncaught Error: Class 'mysqli' not found。必须手动启用扩展并确认 CLI 与 Web 环境使用的是同一份配置。
确认 phpEnv 当前使用的 php.ini 路径
phpEnv 可能为不同 PHP 版本维护多套配置,CLI 和 Apache/Nginx 模块可能加载不同 php.ini。不确认路径就改错文件,改了也白改。
- 运行
php --ini查看 CLI 加载的配置(重点关注 “Loaded Configuration File”) - 在 Web 环境中新建
info.php,内容为<?php phpinfo(); ?>,访问后搜索 “Loaded Configuration File” 对应的路径 - 常见位置:phpEnv 安装目录下的
versions/{version}/etc/php.ini或conf/php.ini - 若两个环境路径不同,需分别修改并重启对应服务(CLI 不用重启,Web 需重启 Apache/Nginx + php-fpm)
启用 mysqli 扩展的三步操作
phpEnv 下的 mysqli 通常已编译进 PHP,但默认被注释。关键不是“安装”,而是“取消注释 + 匹配扩展名”。
- 打开对应
php.ini,搜索extension=mysqli—— 注意不是extension=php_mysqli.dll(那是 Windows XAMPP 的写法,phpEnv 是类 Unix 环境) - 确保该行未被分号注释,即形如
extension=mysqli(无空格、无分号、无引号) - 检查
extension_dir是否指向正确目录,例如extension_dir = "/path/to/phpenv/versions/8.2.0/lib/php/extensions/no-debug-non-zts-20220829";路径错误会导致PHP Warning: Unable to load dynamic library 'mysqli' - 保存后,执行
php -m | grep mysqli,有输出即表示 CLI 已生效;Web 端需重启服务再验证phpinfo()
传统 MySQLi 连接写法及常见失败点
启用扩展后,mysqli 类可用,但连接失败往往不是扩展问题,而是参数或权限细节没对上。
- 面向对象写法:
$conn = new mysqli("127.0.0.1", "root", "password", "testdb", 3306);—— 推荐用127.0.0.1而非localhost,避免 Unix socket 路径不匹配导致连接超时 - 必须检查
$conn->connect_error,不能只靠if ($conn)判断,因为构造函数即使失败也会返回对象实例 - MySQL 8.0+ 默认使用
caching_sha2_password认证插件,老版本 PHP 可能不兼容;若报Client does not support authentication protocol,需在 MySQL 中执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; - 如果数据库名含特殊字符或大小写敏感,确保传入的
$dbname参数与实际库名完全一致(Linux 下库名区分大小写)
最容易被忽略的是:phpEnv 启动多个 PHP 版本时,php -v 显示的版本和 Web 服务器调用的版本可能不一致,phpinfo() 里看到的 mysqli 没加载,大概率是改错了那个版本的 php.ini。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











