mysqli 与 try catch 如何丢出例外?

首先我是用 mysqli class 连接资料库

$do = new mysqli($servername, $username, $password, $mysqldb);

假设有一个 query 是这样

$do->query(
      "DELETE FROM `xxx`
      WHERE `id` = x "
    );

我要怎么判断他是否有正确执行且 throw new Exception
我的想像是这样就可以了是吗

$DDD = $do->query(
      "DELETE FROM `xxx`
      WHERE `id` = x "
    );
    
if (!$DDD) {
    throw new Exception('ERROR!');
}

如果是循环呢?怎么判断是否有错误并丢 throw new Exception?

$record = $do->query(
    "SELECT * FROM `order_record`
    WHERE `x` = 'x' "
  );

  foreach ($record as $row) {
    // ...
  }

如果抓到例外,在 Exception 中加入 $do->rollback() 上面的执行或删除确定都会恢复?

try {
    // ...
} catch (Exception $e) {
  $do->rollback();
}

PS 我 mariadb 使用 InnoDB 类型

阅读 3.2k
1 个回答

如果出错query方法会返回false的,只要判断这个就行了。

if (!$do->query('SOME SQL QUERY STRING')) {
    throw new Exception();
}

要回退事务,你需要关闭自动提交$do->auto commit(false),然后进行你的操作,在操作无误后需要手动提交$do->commit(),在出现错误时回退$do->rollback()

SELECTSHOWDESCRIBEEXPLAIN这些SQL操作不会修改数据库,判断是否出错返回的结果是否为false就行了,不用rollback,抛出的异常要和UPDATEDELETEINSERT等区分开。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题