MariabDB同步UPDATE查询

问题描述

我正在使用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);

解决方法

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