php - 在交易过程中重新加载页面

标签 php mysql mysqli transactions

如果用户在交易过程中停止页面完全加载然后刷新页面,交易是否会应用两次?

最佳答案

简短的回答是 - 你必须检查。即使一个查询没有正确执行,交易也会失败。然而,真正的问题是——如果用户中止加载,这并不意味着服务器将停止执行代码。中止页面加载仅意味着用户决定不接收返回的数据。您的 Web 服务器不必遵守,PHP 也不必遵守 - 他们甚至可能不知道用户关闭了管道这一事实。现在我们进入了一个完全不同的游戏领域——PHP 可以嵌入到服务器中,也可以充当独立服务器(称为 php-fpm)。如果 PHP 通过 mod_php 嵌入到服务器(例如 Apache)中 - Apache 决定是否中断正在执行 PHP 进程的线程或进程。它仍然可以决定执行整个操作,收集结果,然后尝试将结果写回套接字 - 只是意识到用户不在了。

如您所见,问题的复杂性并不像“如果用户中止怎么办”那么简单 - 在您的网络服务器上控制程序执行不是由用户决定的。

现在,假设 Web 服务器愿意玩球,并且它会以某种方式告诉 PHP 中止执行 - 在这种情况下,事务不会执行,它会失败,因为不会发出提交。

如果服务器不愿意玩球或者它根本没有办法中止 PHP 进程 - 那么是的,您最终将执行两个或更多事务,具体取决于您的用户的操作。

关于php - 在交易过程中重新加载页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30941441/

相关文章:

php - GROUP_CONCAT 创建下拉列表

MySQL 和连接

mysql - 如何在一个 SQL 查询中选择同一个表中的相关项

php - 让 mysqli_query 执行的问题

php - SQL 语句给我一个错误?

php - 我可以从 Symfony2 的容器中到达 "/web"路径吗?

php - require_once() 在文件开头添加换行符

MySQL 循环与 LOAD DATA LOCAL INFILE 一起使用

php - 从数据库中选择随机三份(或更多)

php - WP_Query 不返回任何结果