-2

当显示一个 PHP 页面时,我想启动一个线程来搜索在 MySQL 表列中输入的最后一个值,以便文本输入字段的值应该是这个最后一个值增加 1(它是一个数字)。我想要一个线程,因为页面可能会显示很长时间,并且在那段时间列可能已经更新了很多次,所以我想获取每个时间间隔的值。单击提交按钮时,该值应该是列中的最后一个。那可能吗 ?


考虑这种情况:

一位用户显示页面,因此该字段包含递增的值。然后另一个用户显示相同的页面,因此该字段也包含相同的递增值。当他们提交表单时,就会出现并发问题,因为他们提交了相同的增量数据!那么如何解决这种情况呢?

4

2 回答 2

3

一位用户显示页面,因此该字段包含递增的值。然后另一个用户显示相同的页面,因此该字段也包含相同的递增值。当他们提交表单时,就会出现并发问题,因为他们提交了相同的增量数据!那么如何解决这种情况呢?

您将无法实时了解最高值的所有可能变化。定期获取值的基于 Ajax 的解决方案将不够快速和可靠。如果最高值恰好在我的请求到达服务器所需的 100 毫秒内发生变化,会发生什么?如果用户的网络连接暂时中断,他点击“保存”,两个值最终相互覆盖怎么办?

通常的解决方案是不在用户界面中确定最高值,而是在将记录存储到数据库中时确定。自动实现此效果的一种方法是在数据库中使用自动增量字段。

如果您绝对需要向用户显示当前值,则需要使用某种锁定机制。IE。确定当前最高值,并为当前用户保留该值,直到他们保存记录或离开页面。但是根本没有办法以 100% 可靠的方式向每个用户显示最高电流值。你以这种方式结束碰撞。就像@NB 在评论中所说的那样,您可能应该重新考虑您的设计。

于 2012-07-11T14:32:29.523 回答
0

您可以通过 AJAX 轻松实现这一点,例如每 1 分钟异步调用一次数据库或控制器 - 或者可能在特定的鼠标事件上 - 并返回 JSON 数据或带有显示数据的视图。许多流行的社交网站这样做是为了在其主页上显示最新的提要/数据。

更多信息:http ://ajaxpatterns.org/Periodic_Refresh

于 2012-07-11T14:30:14.450 回答