Почему транзакции MySQL не работают с PDO? - PullRequest
0 голосов
/ 08 мая 2018

Я сталкиваюсь с каким-то странным поведением с php, pdo и mysql при попытке использовать транзакции, и я уверен, что с этим не должно быть проблем, но есть.

Изменения записываются в базу данных, даже если должен быть выполнен откат!

Итак, я получил эту часть API, которая вносит изменения в данные в базе данных. По какой-то причине запросы (query1 и query2) возвращают 0, что означает, что ни одна строка не была отредактирована. Это довольно странно, так как данные в БД изменились, но это еще одна проблема ..

Так вот конкретный отрывок. Обратите внимание, что фактические запросы PDO заключаются в функции для масштабируемости и простоты использования, но они работают, не беспокойтесь.

if ($this->db->transaction('begin') == FALSE)
{
    $this->application->setStatus('508002', 'Database transaction failure');
    return FALSE;
}
$count = 0;
$query1 = $this->db->genericUpdate('someData');
$query2 = $this->db->genericDelete('someData');

$count     += $query1 + $query2;

if ($count < 1)
{
    $this->db->RWQuery('ROLLBACK'); // Tried invoking the rollback manually...
    $this->log('Count', $count); // Count is 0 in log file...
    if ($this->db->transaction('rollback') == FALSE)
    {
        $this->application->setStatus('508002', 'Database transaction failure');
        return FALSE;
    }
}

По какой-то странной причине сервер MySQL, похоже, игнорирует команду отката, отправляемую на сервер. Я включил ведение журнала запросов в my.cnf:

649 Query     START TRANSACTION
649 Query     UPDATE `tbl` SET bla = 'foo' WHERE blub = 'bar'   LIMIT 1
649 Query     DELETE FROM `tbl2` WHERE bla = 'fooo'
649 Query     ROLLBACK
649 Query     rollback
649 Quit

Движками базы данных являются InnoDB, я проверял дважды или больше. Также не выдается никаких исключений ни в журналах ошибок Apache / PHP, ни в каких-либо других средствах системного журнала.

Также я не выдаю DDL-операторов, которые могли бы инициировать фиксацию.

Я не нашел ничего похожего на мою проблему в сети, и я хотел бы услышать, если бы кто-то испытывал подобные проблемы.

...