Mysqli连接自定义错误信息无法显示,求原因解析
自定义MySQLi连接错误信息不显示的原因解析
你的代码如下:
<?php require_once "connect.php"; $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name); if ($polaczenie->connect_errno != 0) { echo "Error: " . $polaczenie->connect_errno; } else { $login = $_POST['login']; $haslo = $_POST['haslo']; echo "It works!"; $polaczenie->close(); } ?>
核心问题点
- 错误抑制符
@的反向影响:你用@屏蔽了new mysqli()的连接错误,但如果connect.php未正确加载(比如文件路径错误、文件不存在),或者文件内的$host/$db_user等配置变量未定义,require_once会直接抛出致命错误,代码根本走不到自定义错误的判断逻辑,直接显示系统默认错误。 - 连接失败后的变量类型错误:当
new mysqli()连接失败且被@抑制时,$polaczenie会返回false而非mysqli对象,这时候调用$polaczenie->connect_errno会触发「调用非对象的成员方法」的致命错误,代码直接中断,自定义错误自然无法输出。
修复方案
- 移除错误抑制符
@:不要屏蔽初始错误,先排查基础问题(比如connect.php是否存在、配置变量是否正确)。 - 先验证连接对象有效性:在判断
connect_errno前,先检查$polaczenie是否为有效对象。 - 可选:启用mysqli异常模式:用异常处理替代手动判断,错误逻辑更清晰。
修改后的示例代码
<?php // 先检查connect.php是否存在,避免致命错误 if (!file_exists("connect.php")) { die("Error: 无法找到connect.php文件"); } require_once "connect.php"; // 检查必要配置变量是否存在 if (!isset($host, $db_user, $db_password, $db_name)) { die("Error: connect.php中缺少必要的数据库配置变量"); } // 移除@,启用mysqli异常模式 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); try { $polaczenie = new mysqli($host, $db_user, $db_password, $db_name); echo "It works!"; $polaczenie->close(); } catch (mysqli_sql_exception $e) { echo "Error: " . $e->getCode(); // 输出错误码,也可使用$e->getMessage()获取详细错误信息 } ?>
内容的提问来源于stack exchange,提问作者Szymon Olkowski
相关产品推荐
相关产品推荐

