1

如果很多用户同时调用相同的 PHP 脚本。执行顺序是什么?会排队吗?执行完 1 个会话后,它会执行另一个?

我对服务器端编程很陌生。我正在编写的 PHP 将访问数据库,并使用事务查询数据库(这意味着如果事务中的任何查询失败,则有提交和回滚)。如果 PHP 没有按顺序执行,它显然会搞砸事情。

[补充] 感谢回复,我会更具体的问题:它是一个通过PHP与服务器通信的在线游戏。需要事务以确保一切都是一致的。就像注册一个新玩家一样,我们不希望表格“PlayerData”被插入并且“PlayerInventory”因为一些错误而失败。他们应该整体成功或失败。

所以如果PHPs同时执行,那么“Rollback”或“Commit”可能会回滚或提交其他PHP同时运行的事务。

那么,解决这个问题的方法是什么?

提前致谢

4

3 回答 3

2

关于你的更新...

每个 php 请求都有自己的 db 连接,因此如果您在一个连接上回滚,它不会影响其他 php 请求。就这么简单:),只要您使用事务,数据库就应该让您摆脱对不一致的恐惧。

通常php请求使用短生命进程,所以如果你有10个并发用户,每个人都会有自己的进程,请求完成的那一刻进程就会被杀死

于 2012-08-08T05:40:18.780 回答
1

服务器将处理每个传入的请求。面对并发修改,PHP 不会帮助您保持数据完整性。话虽如此,使用数据库事务将帮助您保持数据完整性,因为它会使多个查询看起来是以某种串行(一个接一个)方式执行的。

如果您的 DB 代码在事务中,您的 DBMS 将为您处理事务内容,以使 DB 代码看起来像是一个接一个地执行(即使这实际上不是下面发生的事情)。这是假设您的 DBMS 支持ACID 事务

于 2012-08-08T05:06:46.273 回答
1

取决于您的网络服务器。一个标准的 Apache 安装将有多个并行的子服务请求。如果您有 20 个孩子,并且 20 个人请求相同的脚本,那么您将获得 20 个同时运行的脚本副本。

脚本的每个副本名义上相互独立,每个运行的脚本副本之间没有通信,除非您添加通信通道(例如会话、数据库、共享文件/内存等)。

如果您不能在数据库上并行处理多个请求,那么您必须在数据库中实现适当的事务和表/行锁,以防止这些并行请求相互干扰。它们仍将并行执行,但事务/锁将确保实际的数据库操作是串行的。

于 2012-08-08T05:08:06.937 回答