我试图实现两个阶段提交使用PHP和MySQL,并推出了短。

主要的块我发现我无法储存的MySQL连接的资源,在一个地方在那里我可以再次找到它的第二阶段。它是可能的序列数据库处理?

这种情况下,我想代码,用于:

  1. 用户发送数据
  2. 服务器启动一个MySQL事务并执行一些查询该数据基于它已经收到。
  3. 服务器发送一个文件回来的用户
  4. 当用户已经成功收到的文件,该服务提交其交易。否则它卷回来。

这似乎需要两个HTTP请求/回应周期,所以我需要能够重新连接到同一个数据库处理在第二个请求,以便提交事务。我一直没能在这一部分。

任何建议是值得欢迎的,即使它的"这是不可能的,在PHP"

有帮助吗?

解决方案

看看LIXA事务管理(http://lixa.sourceforge.net/)它将PHP和MySQL开始释放了0.9.0

它提供了分发事务处理和两阶段提交的功能。

关于

Ch。F.

其他提示

由于php请求/回应基于执行情况的一个持久的数据库连接是不可能,据我所知.

你可以试试的工作围绕这一限制使用的一种票的机制。你的步骤将是:

  1. 用户发送数据
  2. 服务器启动一个MySQL事务并执行某些查询的基础上它已接收的数据,分配一个独特的'票的事务。
  3. 服务器发送一个文件和机票回来的用户
  4. 当用户已经成功收到的文件和发出的另一请求含有该票,服务器提交其交易。否则它卷回来。
  5. 参照Cassy的评论:后一定的时间周期所有未提交TAs应该滚回为了防止数据库从beeing'淹没'与旧的交易

禾田

回答KB22和rojoca,原因,我需要它这样做的方法是,"文件",我指的是实际上源码数据库,结束了为数据存储在一个移动设备。

第一个请求的员额的更新源码数据库服务器,试图合并在数据源码表;出现问题时,移动设备不能成功地收到一个新的源码数据库(一其反映了移动的设备的变化和任何其他新的东西从网应用程序),因为它将试图发送相同(老)源码数据库的网络第二次,造成重复的项目在网表的任何其是创造了在移动设备。

因此,网络的需要,以确保该装置具有新的数据库之前提交合并的变化。鉴于变化无常的网络,这似乎只是可行的,如果设备可以发送一个明确的ACK后收到的新的源码数据库。而这仅仅是可能的,如果我们做出的两项要求(1中。该源码数据库进行合并;2.的确认收据的新的源码数据库上的设备)。

一个棘手的问题,的确,它是非常有用的信息,找出PHP不能操作数据库处理下降到必要的水平。

[我也不认为我可以使用一事表,因为我需要返回的数据基于设备的"真实"的网页数据表。我觉得我会遇到的问题与auto_increment领域,如果我没有使用真正的表格]

谢谢你的评论意见。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top