如何获取mysqli::prepare执行失败时的错误详情?
获取mysqli::prepare执行失败的有效错误描述
当mysqli::prepare()返回false时,无法通过$my_sqli->errno或$my_sqli->error_list获取有效错误信息——因为这些属性对应连接级别错误,而prepare失败的错误属于语句级别错误。你需要通过$my_sqli->error获取具体错误描述,或者在判断$stmt === false时直接抛出包含该属性的异常。
修改后的代码示例:
<?php $stmt = $my_sqli->prepare("UPDATE MyTable SET a=?, b=?, c=? WHERE x='whatever'"); if ($stmt === false) { throw new Exception("Prepare failed: " . $my_sqli->error); }
更推荐的做法是开启mysqli异常模式,无需手动判断错误,系统会自动抛出含详细信息的异常:
<?php // 开启mysqli异常模式 $my_sqli->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT; try { $stmt = $my_sqli->prepare("UPDATE MyTable SET a=?, b=?, c=? WHERE x='whatever'"); // 后续操作 } catch (mysqli_sql_exception $e) { throw new Exception("Prepare failed: " . $e->getMessage()); }
核心原因:mysqli::prepare()执行失败时,错误信息会被存储在连接对象的error属性中,而非errno或error_list(二者通常仅在连接出错时赋值)。开启异常模式后,所有mysqli操作的错误都会自动抛出异常,能大幅简化错误处理逻辑。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

