我试图将MySQLi查询错误转换为异常,但不能 - 只有在连接数据库失败时才会抛出mysqli_sql_exception。
我使用mysqli_report(MYSQLI_REPORT_STRICT)
和程序化的MySQLi函数嵌入到自定义包装类中。
前代码:
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?
发布于 2019-05-24 13:47:16
前段时间我设法解决了这个问题。正如在其他答案中指出的那样,
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
告诉mysqli抛出异常是一种正确的方法。
但是,如果你在你自己的包装器中包装mysqli函数(就像每个人都应该这样!) - 它没有太大的区别。无论哪种方式,您都需要添加代码来检查是否成功 - 无论是if
还是catch
。然而,呼叫次数非常有限,所以不会太麻烦。
但是所有这些因为所有运动热潮而从mysql“移动”到mysqli的人(但是让方法保持相同并且在整个代码中都具有mysqli功能)将从这个设置中受益匪浅(如果他们不会遵循将每个函数调用包装到try-catch中的常见习惯,这将是无用的)。
发布于 2019-05-24 14:33:11
我知道这有点太晚了,但为了后人的缘故。我发现MYSQLI_REPORT_STRICT是限制性的,某些异常不会被引发,因此它们无法由catch块处理。
mysqli_report(MYSQLI_REPORT_ALL); // Traps all mysqli error
try {
$mysqli = new mysqli('localhost','user,'pwd','db');
/* I don't need to explicitly throw an exception as this is being
done automatically */
} catch(Exception $e) {
echo $e->getMessage();
}
https://stackoverflow.com/questions/-100006800
复制相似问题