首先我是用 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 类型
如果出错
query
方法会返回false的,只要判断这个就行了。要回退事务,你需要关闭自动提交
$do->auto commit(false)
,然后进行你的操作,在操作无误后需要手动提交$do->commit()
,在出现错误时回退$do->rollback()
。SELECT
、SHOW
、DESCRIBE
、EXPLAIN
这些SQL操作不会修改数据库,判断是否出错返回的结果是否为false
就行了,不用rollback
,抛出的异常要和UPDATE
、DELETE
、INSERT
等区分开。