阿里云
发表主题 回复主题
  • 728阅读
  • 4回复

[数据库]php中循环事务应该处理

级别: 新人
发帖
2
云币
3
有一个这样的需求,查出数据表的数据,例如100条,我要根据这100条数据去循环,更新其他 a、b、c表,如果在循环的过程中其中一条错误了,那么这个时候我应该怎么去回滚, E#F9<=mA)  
foreach ($data as $v){ JhXN8Bq33  
  $sql = 'UPDATE `db` SET `field`='1' WHERE (`field_id`='1')'; W%Nu]9T  
  $res = mysql_query($sql); Bst>9V&R  
  if(!$res){ Gy7x?  
    如果有错,我在这里应该怎么让这个回滚到未更新之前? yNf=Kl  
  } -oT+;2\2  
} 7tO$'q*h  
求请教,感激不尽
关键词: 数据 错误 php mysql sql
级别: 程序猿
发帖
423
云币
647
只看该作者 沙发  发表于: 09-28
首先,您的数据库存储引擎要设置为 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);
 
 排版不是很好,但就是这个意思,理解就好。
 
 
 
[ 此帖被服务器云在2018-09-28 09:35重新编辑 ]
级别: 新人
发帖
2
云币
3
只看该作者 板凳  发表于: 09-28
回 1楼服务器云的帖子
我想的是,能不能这个,如果当前这个循环里面的更新错误了,就回滚当前这个,不影响下面的,这样有办法做到?
级别: 小白
发帖
37
云币
62
只看该作者 地板  发表于: 09-28
Rephp中循环事务应该处理
每次就是一个单独的事务啊
级别: 程序猿
发帖
423
云币
647
只看该作者 4楼 发表于: 09-28
  1. foreach ($data as $v){
  2.   mysql_query('BEGIN');
  3.   $sql = 'UPDATE `db` SET `field`='1' WHERE (`field_id`='1')';
  4.   $res = mysql_query($sql,$con);
  5.   if(!$res){
  6.    // 如果有错,我在这里应该怎么让这个回滚到未更新之前?
  7.    mysql_query('ROLLBACK');
  8. }
  9.   else{
  10.     mysql_query('COMMIT');
  11.   }
  12. mysql_query('END')
  13. }
rvRIKc|}l  
xv 9 G%  
这是原生的,如果您用 thinkphp,可以用startTrans、commit、rollback方法。 也可以用PDO的beginTransaction、rollback和commit。 :} N;OS_  
+BgUnu26  
fIii  
您去了解一下。 3!Cab/T  
-o B` v'  
Mp_SL^g|  
:BVYS|%  
p.RSH$]  
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个