Thursday, November 1, 2007

Транзакции в mysql + pdo

Не работал PDO::rollBack();

Решение.

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:

dead_star said...
This comment has been removed by the author.
dead_star said...

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 писать ненужно

Unknown said...

Ох как это давно было :) Даже страшно.

 
Каталог сайтов, Добавить сайт