Проблемы с транзакциями PHP PDO - PullRequest
5 голосов
/ 23 июня 2011

У меня есть простой метод try, который работает не так, как я ожидал.Это моя первая попытка использования транзакций с PDO:

try
        {
            $dbo = Db::init();
            $dbo->beginTransaction();
            $dbo->exec("TRUNCATE TABLE {$this->table}");
            $dbo->exec($insert);
            $dbo->commit();
        }
        catch(Exception $e)
        {
            $dbo->rollBack();
            echo 'Failed to sync ' . $this->table; 
        }

Проблема заключается в том, что, если $dbo->exec($insert); не удается, $dbo->exec("TRUNCATE TABLE {$this->table}"); не возвращается.Есть идеи?

Ответы [ 2 ]

7 голосов
/ 23 июня 2011

TRUNCATE невозможно откатить.Вместо этого используйте DELETE.

4 голосов
/ 23 июня 2011

Предполагая, что вы используете MySQL, TRUNCATE TABLE имеет неявный COMMIT.Из документации на http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html:

As of MySQL 5.0.8, truncate operations cause an implicit commit. Before 5.0.8, truncate operations are not transaction-safe; an error occurs when attempting one in the course of an active transaction. 
...