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

<?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. MyBatis 动态SQL注意事项

  2. js中创建table表格

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. css常用属性总结:文本属性中的text-align

    前面提到text-indent属性,用来实现文本的缩进,今天的text-align使用率可比文本缩进高的多.拿自己现在做的项目上来说,水平居中和垂直居中估计是用到最多了,那我们就先看看它的语法吧! t ...

  4. abd启动不了

    解决办法: 杀死 db.exe或者tadb.exe

  5. 【bzoj1911】[Apio2010]特别行动队

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4048  Solved: 1913[Submit][Statu ...

  6. Linux下patch的制作和应用

    转自:http://blog.chinaunix.net/u3/100239/showart_1984963.html 首先介绍一下diff和patch.在这里不会把man在线文档上所有的选项都介绍一 ...

  7. Kafka命令行常用命令说明

    基于0.8.0版本. ##查看topic分布情况kafka-list-topic.sh bin/kafka-list-topic.sh --zookeeper 192.168.197.170:2181 ...

  8. MySQL数据库远程连接的配置方案

    首先,目的是使用本机可视化工具SQLyog通过IP地址远程访问另一台机器上的MySQL数据库. 本人实践的MySQL版本是MySQL 5.7.23,数据库部署的主机系统是Windows.这些简单配置均 ...

  9. android studio使用真机测试时点击Debug调试模式时报Error running app:No target device found,点击运行模式却是启动正常的

    原因是adb没检测到设备(包括真机和虚拟机). 在Terminal执行adb devices命令,查看有没有连接到的设备. 如果没有设备,确认虚拟机是否正确打开,真机是否连接打开USB调试并安装驱动. ...

  10. [转]Android下怎么使用LDD查看依赖库

    Android下没有ldd可以使用,在进行ndk开发的时候,检查库的依赖项特别麻烦.有两个解决方案: 1.将linux的的ldd移植过去.因为android也是基于linux的,所以将ldd移植过去是 ...