$sql="insert into users(userid,password) values('$userid','$password')";
if(mysql_query($sql_reg_save)) {
  $sql="insert into users_info(truename,sex,age) values('$truename',$sex,$age);
  mysql_query($sql_reg_save);
}

解决方案 »

  1.   

    谢谢,但你的方法也有不妥:如果对users_info操作不当,没有成功,而users已经成功了,就不行了:(
      

  2.   

    这个$sql="insert into users(userid,password) values('$userid','$password')";
    if(mysql_query($sql_reg_save)) {
      $sql="insert into users_info(truename,sex,age) values('$truename',$sex,$age);
      if(!(mysql_query($sql_reg_save)))
       {
          $sql_del="delete from users where userid=$userid";
          if (mysql_query($sql_reg_save))
             {
                  echo "操作失败,数据已经回滚";
             }else
             {
                  echo "操作失败,垃圾数据产生!请通知管理员";
                  写入日志
             }    }
    }
      

  3.   

    可以用事务处理,不过我所知道的是oracle的方式。不好意思,不太懂php,用asp写。
    conn.BeginTrans
    url=rtrim(rs("payment_url"))
    SQL="insert into table (tablevalues) values(tablevalues)"
    conn.execute(sql)  //此时并未执行语句
    if conn.Errors.Count>0 then  //如果错误数大于1
    conn.Errors.Clear   //清空错误
    conn.RollBackTrans  //回滚
    else
    conn.execute("insert into table(tablevalues) vlaues(tablevalus)")
    if conn.Errors.Count>0 then
    conn.Errors.Clear 
    conn.RollBackTrans
    else
    conn.CommitTrans      //提交执行
    end if
    end if
    如果出错将回滚,什么都不执行。    如果你用SQL Server 很简单,用触发器,如果一个事件发生将处理相应的事件。而且只要服务器不在第二条语句执行的时候跨掉,第二条于句都回执行完成。除非你的第二条语句出错。
      

  4.   

    谢谢你,我觉得也应该用事务机制,不过mysql 不支持:(