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

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

级别: 新人
发帖
2
云币
3
有一个这样的需求,查出数据表的数据,例如100条,我要根据这100条数据去循环,更新其他 a、b、c表,如果在循环的过程中其中一条错误了,那么这个时候我应该怎么去回滚, qZ8 V/  
foreach ($data as $v){ unUCn5hJ=  
  $sql = 'UPDATE `db` SET `field`='1' WHERE (`field_id`='1')'; \qU.?V[2  
  $res = mysql_query($sql); LhM{d  
  if(!$res){ -c1$>+  
    如果有错,我在这里应该怎么让这个回滚到未更新之前? 0tzMu#  
  } aK ly1G  
} :<`hsKy&  
求请教,感激不尽
关键词: 数据 错误 php mysql sql
级别: 程序猿
发帖
420
云币
644
只看该作者 沙发  发表于: 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中循环事务应该处理
每次就是一个单独的事务啊
级别: 程序猿
发帖
420
云币
644
只看该作者 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. }
5 4ak<&?  
mHK@(D7X  
这是原生的,如果您用 thinkphp,可以用startTrans、commit、rollback方法。 也可以用PDO的beginTransaction、rollback和commit。 8X}^~e  
nV!2Dfd  
pY{; Yn&t  
您去了解一下。 iX8h2l  
u"`5  
ysSjc  
6)=](VmNL`  
fs2m N1  
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: 95 - 6 = ?
上一个 下一个