具体实例如下,对数据表进行插入和删除操作,两个操作都成功才会修改数据表,否则数据表不变。

<?php
class connDb{
private static $host = 'jxq-off-ku-qa00.dns.ganji.com:3400';
private static $username = 'root';
private static $password = '123456';
private static $dbName = 'test';
private $conn = null; public function __construct(){
$this->conn = new MySQLi(self::$host,self::$username,self::$password,self::$dbName);
if(!$this->conn){
die('数据库连接错误:'.$this->conn->connect_error);
}
$this->conn->query("set names utf-8");
} public function execute_xa($sql){
$this->conn->query($sql);
} public function execute_dql($sql){
$rs = $this->conn->query($sql) or die('查询数据库出错:'.$this->conn->error);
$rsList = array();
if($rs){
while($row = $rs->fetch_assoc()){
$rsList[] = $row;
}
}
$rs->free();
return $rsList;
} public function execute_dml($sql){
$rs = $this->conn->query($sql);
if(!$rs){
$flag = 0;
die('数据库操作出错:'.$this->conn->error);
}else if($this->conn->affected_rows > 0){
$flag = 1;
}else{
$flag = 2;
}
return $flag;
} public function closeConn(){
$this->conn->close();
}
} testAction();
function testAction(){
$XA = uniqid("");
$conn1 = new connDb();
$conn2 = new connDb();
$sql1 = "insert into LiuHuaYongUser (username,password) values('admin3','111111')";
$sql2 = "delete from LiuHuaYongUser where id = 165";
$conn1->execute_xa("XA START '$XA'");
$conn2->execute_xa("XA START '$XA'");
try{
$add_status = $conn1->execute_dml($sql1);
$del_status = $conn1->execute_dml($sql2); $conn1->execute_xa("XA END '$XA'");
$conn2->execute_xa("XA END '$XA'"); $conn1->execute_xa("XA PREPARE '$XA'");
$conn2->execute_xa("XA PREPARE '$XA'"); if(!($add_status && $del_status)){
throw new Exception("操作失败");
} echo '程序运行成功!';
$conn1->execute_xa("XA COMMIT '$XA'");
$conn2->execute_xa("XA COMMIT '$XA'");
}catch (Exception $ex){
echo '程序运行失败!';
$conn1->execute_xa("XA ROLLBACK '$XA'");
$conn2->execute_xa("XA ROLLBACK '$XA'");
} } ?>

  

php使用xa规范实现分布式事务处理的更多相关文章

  1. MySQL 中基于 XA 实现的分布式事务

    1 XA协议 首先我们来简要看下分布式事务处理的XA规范可知XA规范中分布式事务有AP,RM,TM组成: 其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务 ...

  2. 数据库分布式事务XA规范介绍及Mysql底层实现机制

    1. 引言 分布式事务主要应用领域主要体现在数据库领域.微服务应用领域.微服务应用领域一般是柔性事务,不完全满足ACID特性,特别是I隔离性,比如说saga不满足隔离性,主要是通过根据分支事务执行成功 ...

  3. .NET分布式事务处理

    在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.NET中的事务处理就能够满足我们的需要,但是,ADO.NET中的事 务不能同事对多个数据库连接进行原子性的操作:如果在你的业务环境中 ...

  4. .NET分布式事务处理总结【下】 - 包含MSMQ的分布式事务处理

    转自:http://www.cnblogs.com/daxnet/archive/2011/03/15/1984995.html .NET直接提供对MSMQ的访问支持,只需要添加System.Mess ...

  5. 【JTA】JTA允许应用程序执行分布式事务处理

    JTA,即Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序的JTA支持极大地增强了数据访问能力. htt ...

  6. ORA-02049: 超时: 分布式事务处理等待锁

    java.sql.SQLSyntaxErrorException: ORA-02049: 超时: 分布式事务处理等待锁 ORA-06512: 在 "HECDEV.BGT_JOURNAL_BA ...

  7. .NET分布式事务处理(转)

    出处:http://www.cnblogs.com/youring2/archive/2011/06/12/MSDTC.html 在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.N ...

  8. 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案

    SQL 错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有 01591. 00000 -  "lock held by in-doubt distributed ...

  9. 【ITOO 4】WCF中,分布式事务处理

    导读:事务可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.在项目中,就有 ...

随机推荐

  1. App登录状态维持

    转载地址:http://www.jianshu.com/p/4b6b04244773 目前APP大都支持长登录,就是用户登录一次后,如果用户没有主动注销.清除APP缓存数据或卸载APP,就在一段时间内 ...

  2. 自定义annotation-----转载

    Java从JDK5.0开始便提供了四个meta-annotation用于自定义注解的时候使用,这四个注解为:@Target,@Retention,@Documented 和@Inherited. @T ...

  3. Jmeter Http接口性能测试

    Jmeter Http接口性能测试 1.      启动Jmeter Jmeter下载解压即可使用,Jmeter启动,点击D:\ProgramFiles\jmeter\apache-jmeter-2. ...

  4. LDA处理文档主题分布代码

    [python] LDA处理文档主题分布代码入门笔记  http://blog.csdn.net/eastmount/article/details/50824215

  5. 76. Minimum Window Substring (String, Map)

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  6. 递归中traverse小人 & dc女王的区别

    TRAVERSE 是一个小人, 拿着一个记事本, 顺着二叉树走, 走过一个, 在本子上面记下来 DIVIDE & CONQUER 是女王接到这个任务, 找两个小弟A和B, 让A和B先去收集, ...

  7. qt5.7 安装

    http://blog.csdn.net/liang19890820/article/details/53931813#安装-qt57 安装运行出错:qt vstool 指定qt安装路径 http:/ ...

  8. [Training Video - 4] [Selenium IDE]

    Selenium IDE Training List

  9. [Selenium]Release in dragAndDrop doesn't work after i update the version of Selenium to 2.45.0

    在升级Selenium的版本之前,写了一段拖拽的代码,Drag and Drop 都好使的, 但是,将Selenium的版本升级到2.45.0之后,图标拖拽可以成功,释放不生效. 试了N多种解决方案都 ...

  10. ie8开发人员工具无法使用,按f12任务栏里出现任务,但是窗体不弹出

    楼主解决了么,刚出现你这样的问题,找了N久,终于解决了,他娘的,偏方啊任务栏不是出现那个箭头么,点击后没反应是吧在缩略图上点右键-最大化,然后就出来了,ctrl+p反正是可以出来调试模式 神人哪,IE ...