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

<?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. PM2 介绍

    [源引]https://github.com/Unitech/pm2 pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着 ...

  2. eclipse中使用maven的 maven install

    windows -> preferences -> Java -> Installed JREs 在default VM arguments 中添加 -Dmaven.multiMod ...

  3. eclipse里启动tomcat无法通过127.0.0.1访问

    在eclipse里面添加tomcat,再发布一个web项目进去,然后启动tomcat,日志显示tomcat在eclipse里面正常启动,hosts里面配置了ip跟域名的对应关系. 通过域名访问可以正常 ...

  4. realproxy

    https://msdn.microsoft.com/zh-cn/library/dn574804.aspx

  5. Redis Set命令

    [Redis Set命令] SET key value [EX seconds] [PX milliseconds] [NX|XX] 将字符串值 value 关联到 key . 如果 key 已经持有 ...

  6. Django基础学习四_数据库的增删改查

    今天主要学习两个东西 1.如何对数据库做增删改查 2.如果将数据库中的数据用html的方式返回到前台 一.对数据库中增删改查操作 1.首先需要先见表,见表的方法我们在“http://www.cnblo ...

  7. Visual Studio 2013 boost

    E:\Visual Studio 2013\install\VC\bin\amd64>E:\IFC\boost_1_56_0_vs2013'E:\IFC\boost_1_56_0_vs2013' ...

  8. [SQL]查询数据库中具有某个字段名的表

    SELECT t.name AS table_name, c.name AS column_name FROM XOIFundData.sys.tables AS t INNER JOIN XOIFu ...

  9. 超赞!UX写手必备技能

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 今天,小编非常荣幸能与大家一起分享一些优秀UX 写手必备的成功技能: 1.开篇抓住用户的心 MBE曾 ...

  10. DataStage 二、InfoSphere Information Server进程的启动和停止

    DataStage序列文章 DataStage 一.安装 1 关于进程需要了解的基础知识 名称 说明 ASB代理进程 通信代理程序,它的作用是协助层与层之间的通信,默认端口是31531,它以后台进程的 ...