Решение.
1. Таблица обязательно innoDb или DBD (мануал mysql)
После этого ничего не изменилось.
2. Перед транзакцией нужно set autocommit = 0; после set autocommit = 1 (mysql manual)
В итоге
<?php
/**
* @var PDO $db
*//
$db->exec('set autocommit=0');
try
{
if ( false === $db->beginTransaction() )
throw new Exception('bla bla bla ');
// do smth
$db->commit();
}
catch ( Exception $e)
{
$db->rollBack();
$logger->error( $e->getMessage ) ;
}
$db->exec('set autocommit=1');
?>
3 comments:
mysql manual
http://dev.mysql.com/doc/refman/5.0/en/commit.html
http://mysql.ru/docs/man/COMMIT.html
сильно подозреваю что метод beginTransaction() выполняет именно BEGIN или START TRANSACTION
так что set autocommit=0 писать ненужно
Ох как это давно было :) Даже страшно.
Post a Comment