顺便说一句adodb操作事务是有点题的,用不了的.
我的代码:
  mysql_query("BEGIN");
    $ok1 = $db->Execute($sql1);  
    $ok2 =  $db->Execute($sql2);   
    $ok3 =  $db->Execute($sql3); 
    if($ok1 &&  $ok2 && $ok3){
       $Message->warning("审核成功,请返回!","index.php?mod=message&op=appfull");    
       mysql_query("COMMIT");
       exit;
     } else{
       $Message->warning("审核失败,请返回!","index.php?mod=message&op=appfull"); 
       mysql_query("ROLLBACK");
       exit;
     }  
这段代码怎么不起作用呢?
表都是InnoDB.

解决方案 »

  1.   

    你的事务模式是什么?是否是自动提交?
    autocommit 是不是 On 了,这样就会在每句自动commit了
    用show命令检查一下,
    mysql> show variables like 'autocommit';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | ON    |
    +---------------+-------+
    1 row in set (0.00 sec)
    set @@autocommit=off;把它关了就行了。
      

  2.   

    不知道你的SQL语句是什么,无法回答你的问题。建议你看看手册中哪些语句是默认提交的和不提交的。
      

  3.   


    update users set messagenum=messagenum+15000 where id=175
    insert into credits(parentid,userid,messagenum,flag,auditname,types,info,handler)values(99999,175,15000,1,'color',0,null,'')
    update appmsgcredits set isaudit=1 where id=50
    1楼的 show variables like 'autocommit';
    这条语句执行不了的.
      

  4.   


    你在什么中执行?
    如果不行,你就直接看一下你的mysql的配置选项文件 my.ini 或 my.cnf 中的关于这个变量的设置。
      

  5.   

    autocommit并不是主要的原因, 当然你设为autocommit=0可能会达到效果.你的语句 无论autocommit设为什么值, 都会开启一个事务, 因为你已经执行了一条语句begin.可能是adodb拦截了这个命令, 或者你的PHP程序里还暗藏什么机关.建议: 以下这2条语句对调
        $Message->warning("审核失败,请返回!","index.php?mod=message&op=appfull");
         mysql_query("ROLLBACK");