我使用第三方支付解决方案在我的应用程序。
会员付款后(3-4秒),第三方支付网站将重定向会员我们的网站。
同时,支付网站向我们的网站发送关于每一笔付款的请求。
如果支付信息请求与重定向用户请求一致,系统将节省两次。为了防止两次录音,我在DB上为每次付款使用了唯一的ID。
$unique_id = $_GET['unique_id'];
## ask the DB this this unique ID exist?
if($exist){
//update some tables
//delete the unique id
}
else{
//it was done before
}假设唯一ID asd89279182jkfhff1249879,如果两个相同的请求在同一秒钟到达我们的网站,并且存在唯一的id,则脚本将执行两次。
mywebsite.com/a.php?unique_id=asd89279182jkfhff1249879我怎样才能防止这种情况下的两次记录?
发布于 2020-02-23 19:08:49
通常您不测试然后插入,只需插入并检查错误,因为您已经在该列上设置了一个UNIQUE constraint。
如果尝试将该唯一值插入到表中,则会得到“重复键”类型的错误。实际上不可能用相同的ID添加两个。
您还可以添加一个ON DUPLICATE KEY子句来定义其他行为,比如用新的数据更新记录。
发布于 2020-02-23 20:39:54
您可以将值UPSERT到表中。我们可以通过以下三种方法之一来模仿MySQL UPSERT:
使用INSERT
或者为id设置PRIMARY KEY和UNIQUE Index可以防止数据重复。
https://stackoverflow.com/questions/60351910
复制相似问题