将查询错误转换为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,这是正常的没有警告,也没有抛出异常吗?


宝慕林4294392
浏览 788回答 3
3回答

繁星coding

不久前,我设法解决了这件事。正如在其他答案,mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);是告诉mysqli抛出异常的正确方法。但是,如果您正在自己的包装中包装mysqli函数(每个人都应该如此!)-这并没有太大的区别。无论哪种方式,您都需要添加一段代码来检查成功与否。if或catch。然而,电话数量将非常有限,因此不会造成太大的麻烦。但是,所有这些“从MySQL”迁移到mysqli的人,由于所有的移动狂热(但保留相同的方法,并在代码中到处都有mysqli函数),将从这种设置中获得巨大的好处(如果他们不遵循将每个函数调用包装到try-catch中的常见习惯,这将是无用的)。

犯罪嫌疑人X

是否必须检查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在重新抛出的异常中。)
打开App,查看更多内容
随时随地看视频慕课网APP