如果用户停止在交易过程中完全加载页面然后刷新页面,那么交易是否会应用两次?
答案 0 :(得分:5)
简短回答是 - 你必须检查。即使一个查询未正确执行,事务也会失败。但是,这是真正的问题 - 如果用户中止加载,这并不意味着服务器将停止执行代码。中止页面加载仅意味着用户决定不再接收数据。您的Web服务器不必遵守,PHP也不必遵守 - 他们可能甚至不知道用户在他们的端部关闭了管道。现在我们进入一个完全不同的游戏区域 - PHP可以嵌入到服务器中,也可以作为独立的服务器(称为php-fpm
)。如果PHP通过mod_php嵌入到Apache等服务器中--Apache会决定是否会中断正在执行PHP进程的线程或进程。它仍然可以决定执行整个事情,收集结果,然后它会尝试将结果写回套接字 - 只是意识到用户不再存在。
正如您所看到的,问题的复杂性并不像“如果用户中止”那么简单 - 用户无法控制Web服务器上的程序执行
。现在,让我们假设Web服务器愿意玩球并且它会以某种方式告诉PHP中止执行 - 在这种情况下,事务将不会执行,它将失败,因为不会发出提交。
如果服务器不愿意打球或者它根本没有办法中止PHP进程 - 那么是的,你将最终执行两个或更多的事务,这取决于你的用户做什么。 / p>