【发布时间】:2021-06-22 07:41:32
【问题描述】:
我对在 php.ini 中一次提交多个请求有疑问。我有一个 php 函数说 insertOrder() 将详细信息插入数据库表并向用户发送通知。详细信息将从另一个来源自动发布到此功能。这些是 insertOrder() 中的步骤
- 启动Mysql事务
- 从orderId=123的数据库表中选择订单数(来自post数据)
- 如果 count= 0 则插入数据库表并发送通知
- 如果不为 0 则更新订单
- 提交
问题是有时系统会同时将相同id的数据发送到inserOrder()。在那个时候,Select the order count from the database table where orderId=123 将始终为 0,因此它将尝试将两个帖子详细信息插入到数据库表中。即使我使用的是 mysql 事务,它也会插入重复的行。可能是什么原因?如果有人知道,请帮我整理一下。
以下是inserOrder()的两个示例数据
{orderId:123,status:pending}
{orderId:123,status:completed}
当我们第一次向 insertOrder() 获取数据时,ID 为 123 的订单不会出现在数据库表中,因此它将插入到数据库表中,第二次它应该更新数据库表的值。由于它同时获取两个数据,因此它正在插入到数据库表中。
这是insertOrder的代码sn-p
function insertOrder()
{
$orderId = $_POST['orderId'];
try
{
start transaction
$order = select from table where orderId=$orderId
if(count($order) == 0)
Insert the order
commit
else
update order where orderId=$orderId
}
catch()
{
rollback
}
}
【问题讨论】:
-
行是重复的还是它们具有相同的 id 和不同的订单数据?您在哪里生成订单 ID#?
-
请分享你的php代码片段\
-
为什么不让数据库分配orderId?
-
我刚刚更新了问题并将帖子数据添加到函数中。你能检查一下吗?
-
检查什么?给定的“insertOrder 的代码 sn-p”不包含有效的 PHP 代码