Joomla 3.X — транзакции разделены между функциями

У меня проблема, когда иногда (раз в 1-3 месяца) транзакция запускается дважды, и в результате данные вводятся в БД дважды.

Вот суть того, что происходит:

function foo()
{
$arr = getsomeArray();
$db = JFactory::getDbo();

try
{
bar($arr);
}
catch(Exception $e)
{
$db->transactionRollback();
}
}

function bar($arr)
{
$db = JFactory::getDbo();

$db->transactionStart();

// series of inserts and updates
// but if any fail, then throw Exception

$db->transactionCommit();
return true;
}

Здесь $ arr в foo () должен содержать уникальные значения. Код не позволяет дублировать записи в БД, проверяя, существует ли эта конкретная запись.

Чтобы проверить, работает ли базовая проверка, я смоделировал $ arr, чтобы он содержал 2 одинаковых значения. Я получаю исключение, как и ожидалось.

Тем не менее, я все еще получаю двойные записи в БД, и я озадачен тем, как это вообще возможно. Отметки времени указывают на то, что одна транзакция дублируется и выполняется параллельно. Я не смог найти никакой помощи по этому конкретному вопросу, в основном потому, что это не должно было произойти.

Я видел все примеры относительно транзакций в Joomla / PHP для использования transactionStart, transactionCommit, а также transactionRollback в одной функции, но код, который я унаследовал, разделил их на 2 разные функции. Не вызовет ли это проблемы с транзакциями, такими как запуск дважды?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]