mysqli_connect()返回false时必须立即调用mysqli_connect_error()获取具体错误信息,否则无法定位connection refused、access denied或unknown host等失败原因。

mysqli_connect() 返回 false 时必须立刻查 mysqli_connect_error()
PHP 脚本里只写 mysqli_connect() 却不检查返回值,是本地连接失败却看不到原因的最常见操作。它失败时返回 false,但错误细节全藏在 mysqli_connect_error() 里。
直接加这三行就能定位问题:
$conn = mysqli_connect($host, $user, $pass, $db, $port);
if (!$conn) {
echo "连接失败:" . mysqli_connect_error(); // 必须有这一句
exit;
}
常见输出包括:
-
Connection refused→ 数据库服务没起来,或端口不对 -
Access denied for user 'xxx'@'localhost'→ 用户名密码错,或用户 host 不匹配(比如你用'localhost'连,但 MySQL 里只有'xxx'@'127.0.0.1') -
Unknown MySQL server host 'xxx'→ 主机名拼错,或 DNS 解析失败(本地开发慎用域名,优先试'localhost')
phpEnv 默认不启用 mysqli 扩展,需手动开启
phpEnv 是 Windows 下的便携式 PHP 环境,它的 php.ini 通常默认禁用数据库扩展。报错 Class "mysqli" not found 或 Call to undefined function mysqli_connect() 就是这个原因。
操作步骤:
- 找到 phpEnv 对应版本的
php.ini(一般在phpenv\versions\{version}\conf\php.ini) - 搜索
;extension=mysqli,去掉前面的分号,改为extension=mysqli - 同样检查
;extension=openssl和;extension=pdo_mysql是否已启用(PDO 连接也需要) - 重启 phpEnv 的 Apache/Nginx 服务(不是仅刷新页面)
改完后运行 php -m | findstr mysqli(Windows 命令行),确认输出含 mysqli。
本地连接用 'localhost',别用 '127.0.0.1'
phpEnv 下 MySQL 默认监听 socket 文件而非 TCP 端口,此时用 '127.0.0.1' 会强制走 TCP,而 MySQL 可能没开网络监听,导致 Connection refused。
正确做法:
- 连接参数中 host 写
'localhost'(触发 Unix socket 连接) - 如果非要用 IP,先确认 MySQL 配置:打开
my.ini或my.cnf,检查是否有bind-address = 127.0.0.1;若注释掉或改为0.0.0.0,再配合port=3306才能稳定走 TCP - 命令行验证:
mysql -u root -p -h localhost能进,但-h 127.0.0.1报错,就坐实是 socket/TCP 切换问题
用户权限只认 'root'@'localhost',不是 'root'@'%'
phpEnv 自带的 MySQL 初始化用户常只授权了 'root'@'localhost'。如果你在代码里连的是 '127.0.0.1',MySQL 会按 'root'@'127.0.0.1' 匹配权限——而该记录往往不存在。
登录 MySQL 后执行:
SELECT User, Host FROM mysql.user WHERE User = 'root'; -- 若只看到 'root'@'localhost',就补一条: CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; FLUSH PRIVILEGES;
更稳妥的做法是统一用 'localhost' 作为 host,并确保用户存在且密码正确——别依赖 '%',它在本地环境下反而容易因解析顺序失效。
真正卡住人的地方,往往不是配置多复杂,而是错误信息没打出来、扩展没开、host 字符串看着一样其实语义不同。每一步都得靠实际输出验证,不能靠“应该可以”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











