Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在PHP中创建和运行线程吗?_Php - Fatal编程技术网

可以在PHP中创建和运行线程吗?

可以在PHP中创建和运行线程吗?,php,Php,当显示一个PHP页面时,我想启动一个线程,搜索在MySQL表列中输入的最后一个值,这样文本输入字段的值应该是这个最后一个值加1(这是一个数字)。我想要一个线程,因为页面可能会显示很长一段时间,在这段时间内,列可能已经更新了很多次,所以我想得到一个时间间隔的每个时段的值。单击“提交”按钮时,该值应为列中的最后一个值。可能吗 考虑以下情况: 一个用户显示页面,因此该字段包含递增的值。然后另一个用户显示相同的页面,因此该字段也包含相同的递增值。当他们提交表单时,会出现并发问题,因为他们提交相同的递增

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


考虑以下情况:


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

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

更多有关:

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

您将无法实时了解最高值的所有可能更改。基于Ajax的解决方案周期性地获取值是不够快速和可靠的。如果最高值在我的请求发送到服务器所需的100毫秒内发生变化,会发生什么情况?如果用户的网络连接暂时关闭,他单击“保存”,两个值最终会相互覆盖,该怎么办

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


如果您确实需要向用户显示当前值,则需要采用某种锁定机制。确定当前最高值,并为当前用户保留该值,直到他们保存记录或离开页面。但根本没有办法以100%可靠的方式向每个用户显示最高电流值。这样会导致碰撞。正如@N.B.在评论中所说,您可能应该重新思考您的设计。

为什么它必须是一个线程?为什么不马上查一下呢?查找值需要那么长时间吗?PHP是单线程的,所以您无法执行此操作。@pheromix-您的设计有问题。我可以想出至少两个其他的场景,你可以运行在同一个问题。这就是为什么您需要停止使用任何增量来发布表单,而使用另一种方法。或者,您可以倾听其他人的意见,毫无理由地使用ajax。你不能用线程来解决这个问题,很可能你也不能用事务来解决。也许可以更好地解释为什么这些数字必须是向用户显示的最新数字。那么呢?我可以使用javascript控制台更改字段,或者只修改将要发送到URL的字符串,打破它真的很难。此外,以Chrome为例,右键单击一个元素,选择inspect,更改任何你想要的文本-提交你的表单,看看人们是否可以随意更改:)这只是Chrome的一个例子,其他浏览器也可以使用他们的开发控制台来做。这是一个有缺陷的系统,很容易被破解,没有任何限制,而且它给出了一个具有商业价值的计数器。这根本不是一个好的设计。@pheromix问题是,即使没有恶意意图,这也是一个设计用来破坏的系统。只要一个用户的请求比另一个用户的请求长几秒钟,您的编号就会出错。
通常的解决方案是在将记录存储到数据库时,而不是在用户界面中确定最高值。
:生成的数据应显示在字段中,并且在显示页面时,它应该随时反映数据库中的更改!