PHP使用mysqli连接数据库:错误密码测试无响应问题排查
问题分析与修复
核心问题
当使用错误密码调用mysqli_connect()时,默认会触发E_WARNING级别的致命错误(取决于PHP服务器配置),直接终止脚本执行,导致if(!$SQL)分支的代码、甚至最后的die(create_response(...))都无法运行,最终页面无输出。
修复方案
1. 禁用mysqli自动终止脚本的错误机制
在调用连接函数前,关闭mysqli的自动致命错误抛出,让脚本可以继续执行错误处理逻辑:
mysqli_report(MYSQLI_REPORT_OFF);
2. 统一响应输出逻辑
不要直接用echo零散输出内容,而是将连接结果写入预设的$RESPONSE结构,确保最终通过create_response()输出统一格式的响应。
修复后的完整代码
<?php include 'SETTINGS.php'; $RESPONSE = ["mode" => "response", "data" => ["title" => $NETWORKDISPLAYNAME, "message" => "Internal Error (0)"]]; $INPUTS = json_decode(file_get_contents("php://input"), true); if(is_array($INPUTS)) { // 关闭mysqli自动终止脚本的错误机制 mysqli_report(MYSQLI_REPORT_OFF); $SQL = mysqli_connect($SQLHOST, $SQLUSER, $SQLPASS, $SQLDB); if(!$SQL) { // 写入连接失败的具体原因 $RESPONSE['data']['message'] = "数据库连接失败: " . mysqli_connect_error(); } else { $RESPONSE['data']['message'] = "数据库连接成功"; // 使用完数据库后关闭连接 mysqli_close($SQL); } } else { $RESPONSE['data']['message'] = "Internal Error (1)"; } // 统一输出响应 die(create_response($RESPONSE['mode'], $RESPONSE['data'])); ?>
额外说明
mysqli_connect_error()可以获取连接失败的具体原因,方便调试;生产环境可替换为通用提示,避免泄露服务器敏感信息。- 保持响应输出的统一性,避免零散
echo破坏create_response()生成的格式(如JSON结构)。
内容的提问来源于stack exchange,提问作者Sam Roberts
相关产品推荐
相关产品推荐

