php mysqli 开启事物,php mysqli扩展中两种开启事物的区别

事务举例:用户1支付50元购买了商品2

$db = new mysqli('127.0.0.1','user','pass','dbname',3306);

$db->query('SET AUTOCOMMIT=0'); //可以写成 $db->autocommit(false);

$db->query('START TRANSACTION'); //可以写成 $db->begin_transaction();

$db->query('UPDATE user SET coin=coin-50 WHERE id=1 AND coin>=50');

$ar1 = $db->affected_rows;

$db->query('UPDATE goods SET num=num-1 WHERE id=2 AND num>1');

$ar2 = $db->affected_rows;

//两条UPDATE语句都操作成功时(受影响的行都为1)提交事务,否则回滚

if($ar1 === 1 && $ar2 === 1) {

$db->query('COMMIT'); //可以写成 $db->commit();

} else {

$db->query('ROLLBACK'); //可以写成 $db->rollback();

}

$db->query('SET AUTOCOMMIT=1'); //可以写成 $db->autocommit(true);

注意,MySQL InnoDB引擎会把单条写操作(insert/update/delete,create/alter/drop等)当做事务来处理并自动提交.所以上面需要先关闭自动提交,这样才可以手动提交多条语句.需要注意的是,手动提交事务后记得设置回自动提交,否则后面的写操作因为没有手动提交会导致自动回滚.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值