Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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_Database_Mysqli - Fatal编程技术网

Php 如果数据由两个用户同时提交,如何避免在数据库中重复输入?

Php 如果数据由两个用户同时提交,如何避免在数据库中重复输入?,php,database,mysqli,Php,Database,Mysqli,我的问题有点让人困惑,我知道我的问题听起来可能和这里的其他问题类似。我有一个表单,它被编号并增加1,这取决于数据库中最后一个值是什么。 例如,在数据库中: ID | ApplicationNumber 1 | 1 2 | 2 因此,如果用户将生成另一个表单,它将显示为:应用程序编号3。它将作为应用程序编号3保存在数据库中。但是如果有两个用户同时提交表单呢?两人都在填写编号为:Application Number 3的表格,在我的插入之前,我执行查询,查找数据库中的最后一个值,以

我的问题有点让人困惑,我知道我的问题听起来可能和这里的其他问题类似。我有一个表单,它被编号并增加1,这取决于数据库中最后一个值是什么。 例如,在数据库中:

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;
}

如果我没说错的话,从数据库的角度来看,有几个简单的选项:

  • 用于mysql中的ApplicationNumber列
  • 为此列创建并以某种方式处理此错误
  • 此外,您还可以在选择之前,以独占方式访问数据。注意,您应该特别注意解锁,并了解其他用户在锁定生效时将无法使用此表

  • 这些解决方案对您有帮助
    insert。。在重复密钥更新时
    插入忽略
    请参阅&问题是您试图实现的目标。是否要向第二个用户显示某种错误。或者,在这种情况下,您想让它将+1悄悄地添加到更新的计数中吗?@Nagh我只是想避免数据库中重复的ApplicationNumber。不过,显示错误并不是真正必要的。我不知道如何处理它,因为它来自两个用户,我想它与一个用户按两次“提交”按钮不同,因为我可以避免这种情况,但是如果两个用户同时提交表单呢?如果正在提交另一份表格,是否可以保留一份表格以供提交?听起来不对,效率也不高。@rigorcadiz有不同的方法来实现你想要的,这完全取决于你想如何应对这种情况?@BeingSunny我会先检查链接。如果数据库具有相同的申请编号,我并不想更新数据库的值,因为两个用户填写表单的方式不同,如果两个用户同时提交表单,则只需更新申请编号即可。我猜同时提交表格只占2%,但如果我找不到解决方案,它会破坏系统中的编号。:)我的ID列如何?我应该放弃它,而只使用应用程序编号作为键吗?“我的iD”列已经是自动递增的。@如果ApplicationNumber实际上是表的主键,您可以同时使用这两个键,也可以直接使用丢弃键。