$DB->begin(); // Start Transaction
try {
$rs = $DB->queryUniqueObject("SELECT Balance FROM tbl_users WHERE UserId = '" . $userId . "' FOR UPDATE");
$totalOrders = sizeof($arrOrders);
for ($j = 0; $j < $totalOrders; $j++)
{
$finalBalance = $rs->Balance - $servicePrice;
// много различного кода...
$DB->execute("UPDATE tbl_users SET Balance = '" . $finalBalance . "' WHERE UserId = '" . $userId . "'");
}
$DB->commit(); // END Transaction
} catch (Exception $e) {
$DB->rollback();
}
Теоретически, я предполагаю, что в моем коде будет выполнена 1 транзакция, но правильно ли это? Или я должен добавить
SELECT Balance FROM tbl_users WHERE UserId = '" . $userId . "' FOR UPDATE
внутрь
for
и тогда это будет N-ое количество транзакций в зависимости от кол-ва totalOrders?
P.S. То, что баланс нужно считать напрямую в SQL запросах я знаю, в данной ситуации это невозможно.