使PDO Commit或Rollback在多个脚本中保持活动状态

时间:2014-01-14 20:54:04

标签: php mysql pdo commit rollback

解释我的问题的最佳方式是使用示例

说我有3个脚本;

第一个是一个表单,在提交它时,它转到第二个脚本,它处理POST变量并将它们插入到DB中 在这个页面/脚本上有另一个提交按钮,它带你到第三页,其中Insert查询最终被提交给DB

这可能吗?

或者提交/回滚必须在同一个脚本上吗?

感谢

1 个答案:

答案 0 :(得分:2)

是的,提交/回滚必须位于启动事务的同一请求中。

另一种看待这种情况的方法是必须在同一个数据库连接中解析事务,并且数据库连接(如任何其他资源)不能在多个PHP请求中生存。

作为@Wrikken评论,您可以将未提交的数据保存在会话数据或其他一些非数据库保留空间(例如memcached)中。

另一种选择是在每次请求期间保存和提交数据库中的数据,但是在表中添加一列用于数据状态。因此,它将在数据库事务方面进行物理提交,但在完成第三个脚本的处理之前,它将被注释为不完整。

我已经实现了这样的系统,例如“购物车”样式信息。它还有助于运行每日cron作业来删除旧的未完成数据。因为不可避免地,人们有时会放弃他们正在进行的工作而永远不会完成任务。