<?php
$conn = mysql_connect('localhost','root','123123') or die ("123!!!");
mysql_select_db('eshop',$conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
?>
<?php
mysql_query("SET AUTOCOMMIT=0"); 
$sql = "INSERT INTO `basket` (`id`, `status`, `qty`) VALUES (NULL, 'test1', '0')";
$sql2 = "INSERT INTO `basket` (`isd`, `status`, `qty`) VALUES (NULL, 'test1', '0')";//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2); 
if($res && $res1){
mysql_query("COMMIT");
echo 'ss';
}else{
mysql_query("ROLLBACK");
echo 'dddd';
}
mysql_query("END"); 
?>以上代码,由于sql2之错误,所以不能提交的。但是,我run以后,还是插入了一条数据啊?可悲啊》为何不执行回滚,再删除那条数据呢?不解。

解决方案 »

  1.   

    因为你写的一条算一个事务   当然不会回滚第一条了
    要想回滚第一条start transaction;
    insert 。。
    insert
    commit;
      

  2.   

    <?php
    $conn = mysql_connect('localhost','root','123123') or die ("123!!!");
    mysql_select_db('eshop',$conn);
    mysql_query("set names 'GBK'"); //使用GBK中文编码;
    ?>
    <?php
    mysql_query("start transaction;");$sql = "INSERT INTO `basket` (`id`, `status`, `qty`) VALUES (NULL, 'test1', '0')";
    $sql2 = "INSERT INTO `basket` (`isd`, `status`, `qty`) VALUES (NULL, 'test1', '0')";//这条我故意写错
    mysql_query("SET AUTOCOMMIT=0"); 
    $res = mysql_query($sql);
    $res = mysql_query($sql2); if($res){
    mysql_query("COMMIT");
    echo 'succ';
    }else{
    mysql_query("ROLLBACK");
    echo 'fail';
    }
    mysql_query("END"); 
    ?>
    还是未成功了,谢谢你了,不成功,我就不下班了。
      

  3.   

    innodb支持事务,myisam不支持事务
      

  4.   


    天哪,好汉,你竟说没难度,你问问我论坛有几人能你真能吹。
    [/Quote]有几人能 你说这种大话真不怕丢脸, 去看看TAOBAO公开的技术架构演变, 看看人家怎么拆表拆库还保证可以做事务吧。
    这话说的,楼主不怕天下人耻笑。