php - mysql语句,事务处理回滚的问题。

查看:73
本文介绍了php - mysql语句,事务处理回滚的问题。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

mysql_query("BEGIN");

$ck_id = M('ods')->add($public);

foreach ($datas as $k => $val) {

 $saveData = M('odo')->add($val);

}

由于插入到odo这个表的数据我是用 foreach循环插入多条数据,怎么判断这些数据全部插入成功了呢?要是有一条没有成功,就做回滚处理。

if($ck_id && $saveData){

              mysql_query("COMMIT");
             $this->success("数据提交成功","__GROUP__/Warehouse/outbound");  
        }else{
             mysql_query("ROLLBACK");
            $this->error("数据回滚,请重新提交");
       }

mysql_query("END");
如果循环了5条数据,怎么判断 $saveData 知道5条数据都插入成功了呢?需要做一个计数器吗?在循环之前 定义一个变量 $count = 0;
每插入成功一条就$count+1;

类似这样的
$count = 0;
foreach ($datas as $k => $val) {

 $saveData = M('odo')->add($val);
 if($saveData>0) {
    $count++;
 }

}
if($ck_id && $count==5) {
回滚处理.....
}

这样可以吗?谁有什么好的方法啊

解决方案

通常会把事务处理写在try-catch 结构里,当add()返回错误,直接抛出异常,catch里就可以捕获到异常,然后做相应的回滚和日志记录。
还有你的开启事务不能那样写,框架底层数据库驱动不一定是用mysql扩展函数写的,而且mysql扩展函数已经不建议使用了,而用 mysqli或pdo。
thinkphp 都有相应的数据库操作方法,应该使用其封装的方法。

这篇关于php - mysql语句,事务处理回滚的问题。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆