phpEnv中MySQL扩展未加载导致mysqli_connect()报Fatal error,需启用php.ini中extension=mysqli和pdo_mysql,改用127.0.0.1连接并验证MySQL服务状态。

phpEnv 里 MySQL 扩展没加载,mysqli_connect() 直接报错
phpEnv 默认不启用 MySQL 相关扩展,哪怕你装了 MySQL 服务,PHP 也“看不见”它。现象是调用 mysqli_connect() 或 new PDO() 时直接抛出 Fatal error: Uncaught Error: Call to undefined function mysqli_connect()。
- 打开 phpEnv 安装目录下的
php/php-8.2.x/php.ini(不是 Apache 或 Nginx 里的 php.ini) - 搜索
extension=mysqli和extension=pdo_mysql,确保这两行前面没有分号; - 保存后,在命令行执行
php -m | grep -E "mysqli|pdo_mysql",确认输出中有这两项 - 如果用的是 Apache 模式,改完 ini 后必须重启 Apache;如果是 CLI 模式,只需重载终端或确认
php --ini指向的是 phpEnv 的配置文件
连接时填 localhost 却连不上,实际该用 127.0.0.1
Windows 下 phpEnv 常见坑:MySQL 配置了 bind-address = 127.0.0.1,而 PHP 里写 localhost 会触发 Unix socket 连接(但 phpEnv 默认没配 socket 路径),结果就是 Connection refused 或超时。
- 优先把连接主机名改成
127.0.0.1,绕过 socket 逻辑:mysqli_connect('127.0.0.1', 'root', '', 'test') - 或者在
my.ini(MySQL 配置文件)里显式加一行:socket=C:/phpEnv/mysql/tmp/mysql.sock,再在 PHP 连接串里用['host' => 'localhost', 'unix_socket' => 'C:/phpEnv/mysql/tmp/mysql.sock'] - 别依赖默认空密码——phpEnv 自带的 MySQL root 密码通常是
root,不是空字符串,连之前先用命令行验证:mysql -h 127.0.0.1 -u root -proot
PDO 连接失败却不报错,因为没开异常模式
很多人写 new PDO('mysql:host=localhost;dbname=test', 'root', ''),发现返回 false 却没任何提示,代码静默挂掉。这是因为 PDO 默认错误模式是 PDO::ERRMODE_SILENT,失败只设 $pdo->errorCode(),不抛异常。
- 必须显式传入错误配置:
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] - DNS 字符串里加上
charset=utf8mb4,比连接后再调setCharset()更可靠,尤其防 emoji 乱码 - 完整安全写法示例:
try { $pdo = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8mb4', 'root', 'root', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); } catch (PDOException $e) { die('DB connect failed: ' . $e->getMessage()); }
phpEnv 的 MySQL 端口被占、或服务根本没启动
phpEnv 启动时不一定自动拉起 MySQL,尤其当你同时装了本地 XAMPP、Docker 或其他 MySQL 实例时,3306 端口冲突极常见。现象是连接报 Connection refused,且 netstat -ano | findstr :3306 显示别的进程占着。
立即学习“PHP免费学习笔记(深入)”;
- 进 phpEnv 控制面板,手动点击“启动 MySQL”按钮,观察日志是否报错(比如
Can't start server: Bind on TCP/IP port) - 改 MySQL 端口:编辑
mysql/my.ini,在[mysqld]下加port=3307,然后 PHP 连接串里写host=127.0.0.1;port=3307 - 检查 MySQL 数据目录权限——phpEnv 解压后若放在
C:\Program Files等受保护路径,MySQL 可能因写权限不足无法启动,建议移到C:\phpEnv这类无空格无权限限制路径
php.ini,其实 Apache 用的是另一份;你以为 MySQL 启动了,其实控制面板显示绿色,但日志里早因 datadir 权限失败退出了。动手前先看日志,比瞎试快得多。



















