php事务处理实例详解


Posted in PHP onJuly 11, 2014

一、php事务处理概述:

事务:是若干事件的集合
事务处理:当所有事件执行成功,事务才执行;若有任何一个事件不能成功执行,事务的其它事件也不被执行。

只要你的MySQL版本支持BDB或InnoDB表类型,那么你的MySQL就具有事务处理的能力。这里面,又以InnoDB表类型用的最多,虽然后来发生了诸如Oracle收购InnoDB等令MySQL不爽的事情,但是这类商业事件与技术无关,下面就以InnoDB表类型为例简单说一下MySQL中的事务处理。

二、php事务处理代码:

<?php
 try{
 $pdo=new PDO("mysql:host=localhost;dbname=psp","root","");
 $pdo->exec("set names utf8");
 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//设置异常处理模式
 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//关闭自动提交
 }catch(PDOException $e){
 echo "数据库连接失败";
 exit;
 }

 try{
 $age=10;
 $pdo->beginTransaction();//开始事务
 $affected_rows1=$pdo->exec("update kfry set k_age=k_age+{$age} where k_name='user1'");
 $affected_rows2=$pdo->exec("update kfry set k_age=k_age-{$age} where k_name='user2'");//随意更改使之执行成功或失败
 /* if($affected_rows1&&$affected_rows2)
 {
  $pdo->commit();
  echo "操作成功";
 }else{
  $pdo->rollback();
 } */
 if(!$affected_rows1)
  throw new PDOException("加入错误");
 if(!$affected_rows2)
  throw new PDOException("减少错误");
 echo "操作成功";
 $pdo->commit();//如果执行到此处前面两个更新sql语句执行成功,整个事务执行成功
 }catch(PDOException $e){
 echo "操作失败:".$e->getMessage();
 $pdo->rollback();//执行事务中的语句出了问题,整个事务全部撤销
 }
 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
 //测试是否成功
 echo "\n操作结果为:\n";
 $sql="select * from kfry";
 $result=$pdo->query($sql);
 foreach($result as $v)
 {
 echo $v['k_name']." ".$v['k_age']."\n";
 }
?>
PHP 相关文章推荐
PHP 金额数字转换成英文
May 06 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
PHP操作XML作为数据库的类
Dec 19 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
PHP处理Oracle的CLOB实例
Nov 03 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
php中curl使用指南
Feb 05 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
详解使用php-cs-fixer格式化代码
Sep 16 PHP
PHP实现显示照片exif信息的方法
Jul 11 #PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 #PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 #PHP
ThinkPHP标签制作教程
Jul 10 #PHP
YII路径的用法总结
Jul 09 #PHP
YII实现分页的方法
Jul 09 #PHP
YII模块实现绑定二级域名的方法
Jul 09 #PHP
You might like
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
PHPlet在Windows下的安装
2006/10/09 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
JavaScript内核之基本概念
2011/10/21 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
Python中使用动态变量名的方法
2014/05/06 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
Python入门必须知道的11个知识点
2018/03/21 Python
python调用百度REST API实现语音识别
2018/08/30 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
树莓派升级python的具体步骤
2020/07/05 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
幼儿园消防安全制度
2014/01/26 职场文书
出纳会计岗位职责
2014/03/12 职场文书
另类冲刺标语
2014/06/24 职场文书
授权委托书范文
2014/07/31 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
社区国庆节活动总结
2015/03/23 职场文书
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis