php - 锁定访问者直到 mysql 查询完成

标签 php mysql lamp

我的网站上有一堆页面,其中一个页面上可以执行的操作取决于网站访问者数据库中的信息。因此,假设访问者 A 来到页面 B 并更新数据库以表明他们已加入某个组。然后访问者转到页面 C,即群组页面。如果用户是群组成员,则会向他们显示成员内容。如果不是,则会向他们显示非成员(member)内容。问题来了(顺便说一句,页面是 php 的):

在理想情况下,页面 B 上运行的查询将在用户转到页面 C 之前立即完成,因此数据库始终填充有关成员资格状态的最新信息。但是,服务器可能会承受大量负载,并且当用户转到页面 C 时查询尚未完成。因此,即使用户是该组的成员,也不会反射(reflect)在页面 C 上因为查询尚未完成。

有没有办法做到这一点,以便如果用户在页面上运行查询,直到该查询完成他们尝试访问的任何其他页面都会“挂起”并在查询完成后加载,或者直到给定的已经过去了多少时间?我可以手动制作这个系统,但如果 mysql 和 php 已经内置了一些东西,那就更好了。

以防万一,我正在使用 LAMP 服务器。

最佳答案

除非您做了任何奇特的事情,例如复制数据库服务器或消息队列系统,否则实际上单个 MySQL 服务器和 PHP 已经是这样工作的。在页面 B 上发出 UPDATE 或 INSERT,并且查询在提交之前不会返回。因此,在完成查询之前,不要从页面 B 返回任何 HTML - 无论如何您都不想这样做,因为您首先需要确保没有错误。那么C页就可以了。

关于php - 锁定访问者直到 mysql 查询完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3797246/

相关文章:

mysql - Xampp/Lampp 更改数据库目录(无数据目录)

windows-7 - 设置 Windows 7 进行 LAMP 开发

PHP 检查 MySQL 中是否存在值

php - wordpress JSONAPI 内省(introspection)器总是将数量限制在 10?

php - x 天后删除用户帐户

Mysql从一张表中查询不同的条件

php - 关系表查询在表中的字段 'id' 中给我一个空值

javascript - jQuery(ajax)提交表单

php - mysql中自定义查询的输出列名

ruby-on-rails - 如何在 Fedora 11 linux 上安装 Redmine?