为了账号安全,请及时绑定邮箱和手机立即绑定

将查询错误转换为MySQLi中的异常

将查询错误转换为MySQLi中的异常

将查询错误转换为MySQLi中的异常我试图将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,这是正常的没有警告,也没有抛出异常吗?
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

不久前,我设法解决了这件事。正如在其他答案,

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

是告诉mysqli抛出异常的正确方法。

但是,如果您正在自己的包装中包装mysqli函数(每个人都应该如此!)-这并没有太大的区别。无论哪种方式,您都需要添加一段代码来检查成功与否。ifcatch。然而,电话数量将非常有限,因此不会造成太大的麻烦。

但是,所有这些“从MySQL”迁移到mysqli的人,由于所有的移动狂热(但保留相同的方法,并在代码中到处都有mysqli函数),将从这种设置中获得巨大的好处(如果他们不遵循将每个函数调用包装到try-catch中的常见习惯,这将是无用的)。


查看完整回答
反对 回复 2019-05-30
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

是否必须检查mysqli_query()是否返回false?

否。

您应该能够执行所需的操作,并指示mysqli驱动程序对sql错误抛出异常,但您需要启用MYSQLI_REPORT_ERROR如果不是已经.。

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)

mysqli_query()现在应该抛出错误的异常。您不需要检查返回值是否失败(这不会发生,因为会引发异常)。

public function mysqlQuery($SQL) {
    try {
        $this->Result = mysqli_query($this->DBlink, $SQL);
    } catch (mysqli_sql_exception $e) {
        throw new MySQLiQueryException($SQL, $e->getMessage(), $e->getCode());
    }
    return $this->Result;}

(注:我变了$this->SQL$SQL在重新抛出的异常中。)


查看完整回答
反对 回复 2019-05-30
  • 3 回答
  • 0 关注
  • 741 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信