【问题标题】:MariabDB synchronous UPDATE queryMariaDB 同步 UPDATE 查询
【发布时间】: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'] &lt; 1) { 中缺少 continue; :即使购物车商品不被接受,您仍然可以添加它。但是您的问题中缺少很多东西,例如您的数据模型,或者正在发生的事情和您所期望的示例:错误的数字是什么,为什么?
  • 请提供整个事务生成的SQL。
  • @hsibboni 我认为你是对的。如果它是由多个人同时提交的,这是一个问题。我现在会纠正它。非常感谢!!!

标签: php mysql sql-update mariadb synchronous


【解决方案1】:

听起来您的 SELECT 事务在 UPDATE 提交之前开始。尝试将 transaction_isolation(在配置中)/tx_isolation(在运行时使用 SET GLOBAL)更改为 READ-COMMITTED。默认为 REPEATABLE-READ。

【讨论】:

  • 你是对的。我会尝试你的解决方案。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
相关资源
最近更新 更多