开发者社区> 问答> 正文

php中循环事务应该处理

有一个这样的需求,查出数据表的数据,例如100条,我要根据这100条数据去循环,更新其他 a、b、c表,如果在循环的过程中其中一条错误了,那么这个时候我应该怎么去回滚,
foreach ($data as $v){
  $sql = 'UPDATE `db` SET `field`='1' WHERE (`field_id`='1')';
  $res = mysql_query($sql);
  if(!$res){
    如果有错,我在这里应该怎么让这个回滚到未更新之前?
  }
}
求请教,感激不尽

展开
收起
有得退商城 2018-09-27 18:42:35 5616 0
3 条回答
写回答
取消 提交回答
  • Rephp中循环事务应该处理
    每次就是一个单独的事务啊
    2018-09-28 09:51:41
    赞同 展开评论 打赏
  • 回 1楼服务器云的帖子
    我想的是,能不能这个,如果当前这个循环里面的更新错误了,就回滚当前这个,不影响下面的,这样有办法做到?
    2018-09-28 09:30:34
    赞同 展开评论 打赏
  • 首先,您的数据库存储引擎要设置为 InnoDB。
     
    1. $con = mysql_connect("localhost","mysql_user","mysql_pwd");
    2. if (!$con)
    3.   {
    4.   die('Could not connect: ' . mysql_error());
    5.   }
    6. $con->autocommit(false);
    7. $result=true;
    8. foreach ($data as $v){
    9.   $sql = 'UPDATE `db` SET `field`='1' WHERE (`field_id`='1')';
    10.   $res = mysql_query($sql,$con);
    11.   if(!$res){
    12.    // 如果有错,我在这里应该怎么让这个回滚到未更新之前? 
    13.    $result=false;
    14.    break;
    15.   } 
    16. if($result){
    17.   $con->commit();
    18. }
    19. else{
    20.   $con->rollback();
    21. }
    22. mysql_close($con);
     
     排版不是很好,但就是这个意思,理解就好。
     
     
     

    -------------------------



    foreach ($data as $v){
      mysql_query('BEGIN');


      $sql = 'UPDATE `db` SET `field`='1' WHERE (`field_id`='1')';
      $res = mysql_query($sql,$con);
      if(!$res){
       // 如果有错,我在这里应该怎么让这个回滚到未更新之前?
       mysql_query('ROLLBACK');


    }
      else{
        mysql_query('COMMIT');
      }
    mysql_query('END')
    }


    这是原生的,如果您用 thinkphp,可以用startTrans、commit、rollback方法。 也可以用PDO的beginTransaction、rollback和commit。


    您去了解一下。




    2018-09-28 09:03:48
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载