mysqli_connect()连接失败显示空白页,根本原因是php默认关闭display_errors且mysqli不自动报错,必须主动用mysqli_connect_error()捕获错误并开启error_reporting(e_all)和display_errors=on。

mysqli_connect() 连接失败时只显示空白页?
这是最常见的现象,根本原因是 mysqli_connect() 出错时不抛异常,也不输出错误信息,除非你主动检查返回值或开启错误报告。PHP 默认关闭了 display_errors,所以连接失败后脚本静默终止,浏览器只看到空响应。
必须做两件事:
- 用
mysqli_connect_error()或$conn->connect_error捕获并输出错误 - 确保
php.ini中display_errors = On且error_reporting = E_ALL(开发环境)
示例片段:
$conn = mysqli_connect('localhost', 'root', '', 'test');
if (!$conn) {
die('连接失败:' . mysqli_connect_error());
}
为什么 new mysqli() 成功但查不出数据?
对象方式创建连接后,常见疏漏是没设置字符集,尤其当数据库/表用的是 utf8mb4 而 PHP 默认用 latin1 通信时,SELECT 可能返回空结果或乱码,看起来像“查不到”。
解决方法是在连接后立即执行:
-
mysqli_set_charset($conn, 'utf8mb4')(过程式) - 或
$conn->set_charset('utf8mb4')(面向对象)
注意:不能用 mysqli_query($conn, "SET NAMES utf8mb4") 替代——它只影响当前会话,而 set_charset 会同时配置客户端、连接、结果三端编码,更可靠。
本地测试时连不上 localhost?试试 127.0.0.1
在 macOS 或某些 Linux 发行版中,localhost 默认走 Unix socket(如 /var/run/mysqld/mysqld.sock),而 127.0.0.1 强制走 TCP/IP。如果 MySQL 配置禁用了 socket 或权限限制严格,用 localhost 就会报 Connection refused 或 Access denied for user。
快速验证方式:
- 命令行先试:
mysql -h 127.0.0.1 -u root -p - 若成功,PHP 中就把
'localhost'换成'127.0.0.1' - 如果还失败,再检查 MySQL 是否监听
bind-address = 127.0.0.1(my.cnf中)
mysqli 扩展没启用?别只看 phpinfo()
phpinfo() 页面里看到 mysqli 模块不等于它真的可用——常见陷阱是 CLI 和 Web SAPI 使用不同 php.ini 文件。你在浏览器里跑脚本失败,却只检查了 Apache 的 php.ini,而命令行 php -m | grep mysqli 显示未加载,说明 CLI 环境缺扩展。
确认步骤:
- Web 环境:访问
phpinfo.php,搜索 “mysqli” 查看是否启用及配置路径 - CLI 环境:运行
php --ini看加载的 ini 文件,再查该文件里是否有extension=mysqli - Windows 用户注意:
php_mysqli.dll必须存在于extension_dir指向目录,且libmysql.dll或php_mysqli.dll依赖的 VC 运行库已安装
真正可靠的测试不是看配置,而是直接调用函数:var_dump(function_exists('mysqli_connect')); —— 返回 true 才算就绪。
php -r 命令行单行验证,排除 Web 服务器干扰,再逐步加参数逼近问题。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











