经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
ThinkPHP数据库驱动之mysql事物回滚
来源:cnblogs  作者:子钦加油  时间:2019/10/16 12:35:52  对本文有异议

1、开启事务方法 startTrans()
2、事务提交方法 commit()
3、事务回滚方法 rollback()

用法例子:

  1. $order = M(‘order’);
  2. $allAdded = true; //先设定一个值为 true;
  3. $data['name'] = 'winter';
  4. $order->startTrans(); //开启事物
  5. for($i = 1;$i<3;$i++){
  6. $sign = $order->add($data); //添加一条数据到order表
  7. if(!$sign){
  8. $order->rollback(); //如果order添加失败事物回滚
  9. $allAdded = false; //并且把allAdded设置为 false
  10. }
  11. }
  12. //回滚
  13. if($allAdded){
  14. $order->commit();
  15. // 如果allAdded为真则两条数据都成功;那么 commit事物提交
  16. echo '添加成功';
  17. }else{
  18. echo '添加失败';
  19. }

如果commit了。那么就提交插入数据。如果发现alladded为假说明有条数据没插入正确。那么就rollback回滚就会取消事物开启之后操作数据库的所有行为。

提供一个例子助于大家加深理解

  1. public function insertdata(){
  2. $model = M();
  3. $model->startTrans();
  4. $data['name'] = 'winter';
  5. //增加一条用户信息
  6. $si = $model->table(C('DB_PREFIX').'user')->add($data);
  7. if(!$si){
  8. $model->rollback();
  9. exit();
  10. }
  11. $car['brand'] = $si;
  12. //增加一条用户id
  13. $c = $model->table(C('DB_PREFIX').'car')->add($car);
  14. if($si && $c){
  15. $model->commit();
  16. }else{
  17. $model->rollback();
  18. }
  19. }
  20. 复制代码

 例子二:

  1. //提现操作
  2. public function ajax_tx()
  3. {
  4. //判断是否登录
  5. if(session('uid') == NULL || session('uid') == "" || session('uid') == false) {
  6. echo "300";
  7. exit;
  8. }else{
  9. //接受提现提交来的数据
  10. $txnumber = intval(trim($_POST['txnumber']));
  11. $name = trim($_POST['name']);
  12. $alipay_number = trim($_POST['alipay_number']);
  13. $data = M("fanxian_new")->where("f_uid='".session('uid')."'")->find();
  14. if(empty($txnumber)){
  15. echo "301";exit;//提现金豆不能为空
  16. }else{
  17. if(empty($data) || intval($data['f_fan_fee'])==0){
  18. echo "302";exit;//无可提现金豆
  19. }else{
  20. if($data['f_fan_fee']<number_format($txnumber,2)){
  21. echo "303";exit;//提现金豆数请勿大于持有金豆数
  22. }else{
  23. if(empty($alipay_number)){
  24. echo "304";exit;//提现者支付宝账号不能为空
  25. }
  26. if(empty($name)){
  27. echo "305";exit;//提现者真实姓名不能为空
  28. }
  29. $model=new \Think\Model();
  30. $model->startTrans(); //开启事物
  31. //操作提现记录
  32. $fanxian_new_log = M("fanxian_new_log");
  33. $fanxian_new_log->f_num_fee = number_format($txnumber,2);
  34. $fanxian_new_log->f_lmId = session("uid");
  35. $fanxian_new_log->f_create_time = time();
  36. $fanxian_new_log->f_name = $name;
  37. $fanxian_new_log->f_alipay = $alipay_number;
  38. $fanxian_new_log->f_status = 1;//1表示提现记录 0表示返现记录
  39. $jdtx = $fanxian_new_log->add();
  40. $fanxian_new = M("fanxian_new");
  41. $fanxian_new->f_uid = $data['f_uid'];
  42. $fanxian_new->f_fan_fee = $data['f_fan_fee']-number_format($txnumber,2);
  43. $jd = $fanxian_new->save();
  44. if(!empty($jdtx) && !empty($jd)){
  45. //提交
  46. $model->commit();
  47. echo "200";exit;//提现成功
  48. }else{
  49. //回滚
  50. $model->rollback();
  51. echo "306";exit;//提现失败
  52. }
  53. }
  54. }
  55. }
  56. }
  57. }

 

原文链接:http://www.cnblogs.com/zmdComeOn/p/11684358.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号