我正在尝试将MySQLi查询错误转换为“异常”,但不能-仅在无法连接数据库时抛出mysqli_sql_exception。
我使用了mysqli_report(MYSQLI_REPORT_STRICT)程序化的MySQLi函数嵌入到自定义包装器类中。
mysqli_report(MYSQLI_REPORT_STRICT)
以前的代码:
public function mysqlQuery($SQL) { $this->Result = mysqli_query($this->DBlink, $SQL); if($this->Result === false) throw new MySQLiQueryException($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink)); return $this->Result; }
问题: 查询失败是否正常,没有警告,也没有引发异常,所以我必须检查mysqli_query()是否返回false?
不久前,我设法解决了这个问题。正如在其他答案中指出的那样,
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
是告诉mysqli抛出异常的正确方法。
只要确保您 没有将每个查询都包装在try-catch中即可。这是一个非常普遍的误解,即一旦您开始使用异常,您就应该开始向左和向右抛出尝试和捕获。恰恰相反,应谨慎使用try-catch。虽然您不应将99%的错误处理到位,而是由整个站点的错误处理程序来处理。您可以从我有关PHP错误报告的文章中阅读有关该主题的更多信息。