DataOdject + PosrgresSQL + ROLLBACK

Krisha

pain in the neck
DataOdject + PosrgresSQL + ROLLBACK

Делаю обновление записи в базе:

PHP:
$ddi = new DataObjects_myClass;
$ddi->get("uid",$values['uid']);
$ddi->setFrom($values);

if (!$ddi->update())   {
    return false;
}

if (что-то не получилось) {
   // cделать откат обновления $ddi->update()
}
Подскажите, плиз, как сделать откат ?
 

crocodile2u

http://vbolshov.org.ru
А если вместо апдейта сначала вставлять новую запись с нулевым uid; если что не получилось, удалить ее, а если все ок, удалить запись с uid, который нужно проапдейтить и заменить нулевой uid на нужный?

PS: Прошу не бить ногами, если говорю ерунду. Лучше объясните, что не так...
 

Krisha

pain in the neck
crocodile2u
Это как-то извратно однако.

2ALL
Предполагаю, что нужно просто юзать ->query() с запросом на откат, вопрос как будет этот запрос выглядеть...
 

Ямерт

The Old One
crocodile2u
Это что-то вроде велосипеда с треугольными колёсами и цепью от собачьей будки. Кроме того, rollback отменяет не последний запрос, а все после последнего commit.

Krisha
А ->query("rollback") не срабатывает?
 

Krisha

pain in the neck
Ямерт
Неа, ни ROLLBACK ни ROLLBACK WORK не срабатывает. Видать я чего-то не учитываю...
 

Макс

Старожил PHPClub
PHP:
$ddi->query('BEGIN');
if (!$ddi->update())   { 
    return false; 
} 
if (что-то не получилось) { 
   $ddi->query('ROLLBACK');
}
так пробовал ?
 

Krisha

pain in the neck
Maxim Matyukhin
Сенкс! :)

-~{}~ 15.04.04 13:30:

P.S. абасса*а можно от того, что в постгресе есть rollback :)

-~{}~ 15.04.04 13:41:

По ходу нужно не забывать делать COMMIT
PHP:
$ddi->query('BEGIN'); 
if (!$ddi->update())   { 
    return false; 
} 
if (что-то не получилось) { 
   $ddi->query('ROLLBACK');
} else {
   $ddi->query('COMMIT');
}
 

BOJIK

Guest
Попробуй поставить ';' в каждом запросе в том числе и в запросах метода $ddi->update() :

$ddi->query('BEGIN;');
if (!$ddi->update()) {
return false;
}
if (что-то не получилось) {
$ddi->query('ROLLBACK;');
} else {
$ddi->query('COMMIT;');
 
Сверху