for($i=0;$i<50;$i++)
{
  $sql="insert into aa(name)values('$name')";
  mysql_query($sql);  $sql_a="insert into bb(user,aa)values('$name','$aa')";
  mysql_query($sql_a);}
在循环中,任何一条插入语句执行失败数据都回滚并退出
在这样的循环中,如何添加事务处理?
谢谢。高人。

解决方案 »

  1.   


    mysql_query("begin");
    $flag = true;
    for($i=0;$i<50;$i++)
    {
      $sql="insert into aa(name)values('$name')";
      if (!mysql_query($sql))
      {
        mysql_query("rollback");
        $flag = false;
        break;
      }  $sql_a="insert into bb(user,aa)values('$name','$aa')";
      if (!mysql_query($sql_a))
      {
        mysql_query("rollback");
        $flag = false;
        break;
      }}
    if ($flag)
    {
        mysql_query("commit");
    }
    else
    {
        die('sql执行错误');
    }另外,多条insert可以优化成1条进行插入,比如你这个可以把所有的insert弄成2条insert语句。
      

  2.   

    ....
    先确认你的表支持不支持事物然后...$sql="insert into aa(name)values('$name')";
    $sql_a="insert into bb(user,aa)values('$name','$aa')";mysql_query("SET AUTOCOMMIT=0");mysql_query("BEGIN");if ((mysql_query($sql)) && ((mysql_query($sql_a))){
    mysql_query("COMMIT");
    }else{
    mysql_query("ROLLBACK");
    }应该是这样吧..
      

  3.   

    你这个循环起啥作用呢 仅仅是为了测试?for($i=0;$i<50;$i++)
    {