@aopil

Как правильно использовать транзакцию в цикле?

$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 запросах я знаю, в данной ситуации это невозможно.
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы