Php 如果数据由两个用户同时提交,如何避免在数据库中重复输入?
我的问题有点让人困惑,我知道我的问题听起来可能和这里的其他问题类似。我有一个表单,它被编号并增加1,这取决于数据库中最后一个值是什么。 例如,在数据库中:Php 如果数据由两个用户同时提交,如何避免在数据库中重复输入?,php,database,mysqli,Php,Database,Mysqli,我的问题有点让人困惑,我知道我的问题听起来可能和这里的其他问题类似。我有一个表单,它被编号并增加1,这取决于数据库中最后一个值是什么。 例如,在数据库中: ID | ApplicationNumber 1 | 1 2 | 2 因此,如果用户将生成另一个表单,它将显示为:应用程序编号3。它将作为应用程序编号3保存在数据库中。但是如果有两个用户同时提交表单呢?两人都在填写编号为:Application Number 3的表格,在我的插入之前,我执行查询,查找数据库中的最后一个值,以
ID | ApplicationNumber
1 | 1
2 | 2
因此,如果用户将生成另一个表单,它将显示为:应用程序编号3
。它将作为应用程序编号3保存在数据库中。但是如果有两个用户同时提交表单呢?两人都在填写编号为:Application Number 3
的表格,在我的插入
之前,我执行查询,查找数据库中的最后一个值,以便在提交到数据库之前,我可以+1
到Application Number value的值。我让两个用户同时提交表单,我在数据库中收到的结果如下:
ID | ApplicationNumber
1 | 1
2 | 2
3 | 3
4 | 3
在将内容插入数据库之前获取最后一个值的查询:
$query = mysqli_query($con,"SELECT table1.ApplicationNumber FROM table1 INNER JOIN table2 ON table1.AdminID = table2.AdminID AND table2.Username = '$user' ORDER BY table1.ApplicationNumber DESC LIMIT 1");
while($row = mysqli_fetch_array($query)) {
$aNumber = $row['ApplicationNumber'] + 1;
}
如果我没说错的话,从数据库的角度来看,有几个简单的选项:
这些解决方案对您有帮助
insert。。在重复密钥更新时
或插入忽略
请参阅&问题是您试图实现的目标。是否要向第二个用户显示某种错误。或者,在这种情况下,您想让它将+1悄悄地添加到更新的计数中吗?@Nagh我只是想避免数据库中重复的ApplicationNumber。不过,显示错误并不是真正必要的。我不知道如何处理它,因为它来自两个用户,我想它与一个用户按两次“提交”按钮不同,因为我可以避免这种情况,但是如果两个用户同时提交表单呢?如果正在提交另一份表格,是否可以保留一份表格以供提交?听起来不对,效率也不高。@rigorcadiz有不同的方法来实现你想要的,这完全取决于你想如何应对这种情况?@BeingSunny我会先检查链接。如果数据库具有相同的申请编号,我并不想更新数据库的值,因为两个用户填写表单的方式不同,如果两个用户同时提交表单,则只需更新申请编号即可。我猜同时提交表格只占2%,但如果我找不到解决方案,它会破坏系统中的编号。:)我的ID列如何?我应该放弃它,而只使用应用程序编号作为键吗?“我的iD”列已经是自动递增的。@如果ApplicationNumber实际上是表的主键,您可以同时使用这两个键,也可以直接使用丢弃键。