PHP操作MySQL时如何捕获超时错误并正常访问查询结果变量
MySQL查询超时捕获实现方法
直接在if判断条件内完成$results变量赋值即可,PHP中赋值表达式的返回值就是所赋的变量值,既可以直接判断查询是否成功,赋值后的$results在后续全上下文都可正常访问,不需要额外拆分逻辑。
完整实现代码
// 建立数据库连接 $conn = mysqli_connect("localhost", "user", "pass", "db"); // 开启mysqli错误报告,避免静默错误漏判,推荐配置 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // 设置会话级查询超时阈值,单位为毫秒 $conn->query('SET SESSION MAX_EXECUTION_TIME = 10'); $sql = "SELECT COUNT(1) FROM table WHERE..."; // 条件内完成赋值+错误校验 if ($results = $conn->query($sql)) { // 查询执行成功,正常处理结果集 $countRow = $results->fetch_row(); $totalCount = $countRow[0]; // 其余业务逻辑直接在此编写,$results可正常调用所有mysqli_result方法 } else { // 查询执行失败,匹配错误类型 if ($conn->errno == 3024) { echo "查询执行超时,请优化SQL语句或调整超时阈值"; } else { echo "查询发生错误,错误信息:" . $conn->error; } }
关键注意点
- 判断条件里用单等号
=做赋值,不要误写为双等号==的相等判断,否则不会完成$results变量赋值。 - 3024是MySQL查询超时的专属错误码,和预设的
MAX_EXECUTION_TIME超时触发场景完全对应。 - 示例代码里设置的10毫秒超时阈值极短,实际业务中需要根据查询场景调整为合理值,避免正常查询被误拦截。
- 不开启错误报告的情况下,要确保mysqli连接没有设置静默忽略错误,否则
query失败返回false的逻辑可能不生效。
内容的提问来源于stack exchange,提问作者Ned Hulton
相关产品推荐
相关产品推荐

