【发布时间】:2020-08-24 11:19:00
【问题描述】:
我正在使用 PHP 和 MariaDB,但遇到了问题。
我将一个值更新为多行,然后选择那里的行以对另一个任务的数据进行新的计算。
这里的问题是我得到了错误的号码。我猜 MariaDB 还没有完成 UPDATE 查询,但是它将完成的标志返回给 PHP,然后 PHP 继续 SELECT 查询。 [我只是猜测]
我愿意接受任何想法。如果我错了,请纠正我。
感谢分享
这是我的代码
$modelAdminOrderBidSys = $this->load->model('Admin\Order\BidSys');
$acceptedItem = typeCast($modelAdminOrderBidSys->getItem($cartItemId));
if (!$acceptedItem) {
return array(
'result' => 'error',
'message' => 'Cannot find item #' . $cartItemId
);
}
$acceptedItem['lastOffer'] = $acceptedItem['offer'];
$acceptedItem['accepted'] = 1;
$acceptedItem['isBot'] = 0;
$modelAdminOrderBidSys->updateItem($cartItemId, array2object($acceptedItem));
$cartItems = typeCast($modelAdminOrderBidSys->getItems($acceptedItem['cartId']));
$accepted = 1;
$total = 0;
$offer = 0;
$lastOffer = 0;
foreach($cartItems as $cartItem) {
if ((int)$cartItem['accepted'] < 1) {
$accepted = 0;
}
$total += (float)$cartItem['total'];
$offer += (float)$cartItem['offer'];
$lastOffer += (float)$cartItem['lastOffer'];
}
$postField = new \stdClass();
$postField->accepted = $accepted;
$postField->total = $total;
$postField->offer = $offer;
$postField->lastOffer = $lastOffer;
$modelAdminOrderBidSys->updateCart($acceptedItem['cartId'], $postField);
【问题讨论】:
-
请分享您正在运行的代码。我不清楚
finished flag是什么,是受影响行的显示吗? -
抱歉我的文字不清楚。我的意思是 MariaDB 对 PHP 有响应,所以 PHP 不需要等待,可以继续执行下一个代码。我更新将很快将代码更新为我的问题,请稍等。
-
是有多个脚本还是只有一个php脚本?如果只有一个,并且它是您问题中的代码,那么您不会遇到并发问题,除非您使用一些特定的库,如 pthreads 或并行,但它不在您显示的代码中。我认为您的
if ((int)$cartItem['accepted'] < 1) {中缺少continue;:即使购物车商品不被接受,您仍然可以添加它。但是您的问题中缺少很多东西,例如您的数据模型,或者正在发生的事情和您所期望的示例:错误的数字是什么,为什么? -
请提供整个事务生成的SQL。
-
@hsibboni 我认为你是对的。如果它是由多个人同时提交的,这是一个问题。我现在会纠正它。非常感谢!!!
标签: php mysql sql-update mariadb synchronous