php使用xa规范实现分布式事务处理
具体实例如下,对数据表进行插入和删除操作,两个操作都成功才会修改数据表,否则数据表不变。
<?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规范实现分布式事务处理的更多相关文章
- MySQL 中基于 XA 实现的分布式事务
1 XA协议 首先我们来简要看下分布式事务处理的XA规范可知XA规范中分布式事务有AP,RM,TM组成: 其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务 ...
- 数据库分布式事务XA规范介绍及Mysql底层实现机制
1. 引言 分布式事务主要应用领域主要体现在数据库领域.微服务应用领域.微服务应用领域一般是柔性事务,不完全满足ACID特性,特别是I隔离性,比如说saga不满足隔离性,主要是通过根据分支事务执行成功 ...
- .NET分布式事务处理
在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.NET中的事务处理就能够满足我们的需要,但是,ADO.NET中的事 务不能同事对多个数据库连接进行原子性的操作:如果在你的业务环境中 ...
- .NET分布式事务处理总结【下】 - 包含MSMQ的分布式事务处理
转自:http://www.cnblogs.com/daxnet/archive/2011/03/15/1984995.html .NET直接提供对MSMQ的访问支持,只需要添加System.Mess ...
- 【JTA】JTA允许应用程序执行分布式事务处理
JTA,即Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序的JTA支持极大地增强了数据访问能力. htt ...
- ORA-02049: 超时: 分布式事务处理等待锁
java.sql.SQLSyntaxErrorException: ORA-02049: 超时: 分布式事务处理等待锁 ORA-06512: 在 "HECDEV.BGT_JOURNAL_BA ...
- .NET分布式事务处理(转)
出处:http://www.cnblogs.com/youring2/archive/2011/06/12/MSDTC.html 在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.N ...
- 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案
SQL 错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有 01591. 00000 - "lock held by in-doubt distributed ...
- 【ITOO 4】WCF中,分布式事务处理
导读:事务可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.在项目中,就有 ...
随机推荐
- Elasticsearch 2.4.1 Bigdesk 插件安装
简介: Elasticsearch 2.4.1 安装 bigdesk bigdesk 是一个 ES 集群监控工具,可以检测到集群状态.各节点信息,包括 JVM.Thread Pools.OS.Proc ...
- jboss & eclipse 集成
* 前提: * 安装了 eclipse-jee-3.5.1 * 解压了 jboss5.1 * * "jboss tools" - "J ...
- Symfony 从路由认识它
经过上一篇文章之后,我们呢,可以访问这个默认的页面,你也会看到一堆高级的debug工具.好了,这次我们开始更多地了解这个symfony2.0. 首先我们要明白一点,Symfony2 的配置是一个着实很 ...
- 新手C#重载、重写的学习2018.08.04
重载:在同一类(class)中,使用相同的方法名称,不同的参数和(不一定)不同的返回值类型构造成的方法. 举例: class OverLoadTest { public void Hello() { ...
- 10G个64bit整数,找出中位数
[10G个64bit整数,找出中位数] 题目:在一个文件中有10G个64bit整数,乱序排列,要求找出中位数.内存限制为2G. 解法:内存限制为2G表面上是限制,实际上是一种提示,在提示我们如何利用2 ...
- react-navigation 3.x版本的使用
安装配置请看: react-navigation 3.x版本的安装以及react-native-gesture-handler配置 2.0以前版本: StackNavigator - 一次只渲染一个页 ...
- CloudStack 4.1快照测试
目前4.1只支持存储快照,4.2能支持内快照 1. 选中实例 2. 查看实例卷 3. 创建快照 4. 通过快照创建模板 5. 查看通过快照创建的模板 6. 通过快照创建模板生成的实例 7. 自动定制创 ...
- halcon的tuple算子功能总结
- Resolving multicopy duplications de novo using polyploid phasing 用多倍体相位法解决多拷贝复制的新问题
抽象.虽然单分子测序系统的兴起已经实现组装复杂地区的能力空前提高在基因组中,基因组中的长节段重复仍然是装配中具有挑战性的前沿. 分段重复同时具有丰富的基因并且倾向于大的结构重排,使得它们的序列的分辨率 ...
- sql时间戳转日期格式
FROM_UNIXTIME(ctime, '%Y-%m-%d %H:%i:%s')