php+mysql 事务处理回滚失败

liulanger160 2010-06-22 11:44:35
php+mysql 事务处理回滚失败 ,请帮我看看这是为什么呢
php版本:5.2.6
mysql版本: 5.0.51
代码如下:

<?php
$host='localhost';
$user_name='root';
$password='vertrigo';

$conn=mysql_connect($host,$user_name,$password);
if(!conn)
{
die('数据库连接失败:'.mysql_error());
}
mysql_select_db('vtiger');
mysql_query("SET AUTOCOMMIT=0");
//1.用一条SQL语句更新vtiger_crmentity_seq里的ID,即在当前值加1
$sql1="update vtiger_crmentity_seq set id=id+1";
$result1=mysql_query($sql1);

//查出当前id
$sqlselect="select id1 from vtiger_crmentity_seq";
$result=mysql_query($sqlselect);
$row=mysql_fetch_array($result);
$crmentityid=$row['id'];

if ($result1 && $result) {
mysql_query("COMMIT");
echo '提交';
echo $crmentityid;
} else {
mysql_query("ROLLBACK"); //有任何错误发生,回滚并取消执行结果
echo '回滚';
}
mysql_close($conn);
?>
...全文
190 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlnuboy 2010-06-22
  • 打赏
  • 举报
回复
楼主代码写错了吧,mysql_query(); 有两个参数, 第一个是sql语句,第二个是连接
Dleno 2010-06-22
  • 打赏
  • 举报
回复
最好自己写对应的语句或存储过程来回滚数据。
PIGer920 2010-06-22
  • 打赏
  • 举报
回复
mysql默认是ENGINE=MyISAM 不可以回滚
你可以动态的改变ENGINE 变成InnoDB。
关于两者区别可参考网上资料 很详细
关于mysql事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System.out.println("事务处理开始!"); con.setAutoCommit(false); // 设置连接不自动提交,即用该连接进行的操作都不更新到数据库 sm = con.createStatement(); // 创建Statement对象 //依次执行传入的SQL语句 for (int i = 0; i < sqls.length; i++) { sm.execute(sqls[i]);// 执行添加事物的语句 } System.out.println("提交事务处理!"); con.commit(); // 提交给数据库处理 System.out.println("事务处理结束!"); // 事务结束 //捕获执行SQL语句组中的异常 } catch (SQLException e) { try { System.out.println("事务执行失败,进行回滚!\n"); con.rollback(); // 若前面某条语句出现异常时,进行回滚,取消前面执行的所有操作 } catch (SQLException e1) { e1.printStackTrace(); } } finally { sm.close(); } } 通常都是上述的写法, 在mysql 不支持事务的时候 , 中间的 setAutoCommit 的事务操作是不是都不生效. 现在innoDB支持 事务了, 上述的 java 代码是否能实现 以下的 事务隔离的 操作, 在修改的时候处于锁定状态 或者 只可以通过存储过程来实现, 单行的锁定 BEGIN; SELECT book_number FROM book WHERE book_id = 123 FOR UPDATE; --这里for update , 以前用Oracle的时候也是有这个行锁 // ... UPDATE book SET book_number = book_number - 1 WHERE book_id = 123; COMMIT;

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧