开发者社区> 问答> 正文

php中循环事务应该处理

有得退商城 2018-09-27 18:42:35 2126
有一个这样的需求,查出数据表的数据,例如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){
    如果有错,我在这里应该怎么让这个回滚到未更新之前?
  }
}
求请教,感激不尽
分享到
取消 提交回答
全部回答(3)
  • 无敌小盾牌
    2018-09-28 09:51:41
    Rephp中循环事务应该处理
    每次就是一个单独的事务啊
    0 0
  • 有得退商城
    2018-09-28 09:30:34
    回 1楼服务器云的帖子
    我想的是,能不能这个,如果当前这个循环里面的更新错误了,就回滚当前这个,不影响下面的,这样有办法做到?
    0 0
  • 服务器云
    2018-09-28 09:03:48
    首先,您的数据库存储引擎要设置为 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。


    您去了解一下。




    0 0
添加回答
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章