beginTransaction () и commit () для подготовленных и неподготовленных операторов - PullRequest
0 голосов
/ 27 октября 2011

У меня есть следующий код:

try{
 $db->beginTransaction();
 $handler = $db->prepare(...);
 $handler->execute()
 $query2 = "INSERT INTO...";
 $db->exec($query2);
 $db->commit();
}catch (PDOException $e) {
 try { $db->rollBack(); } catch (Exception $e2) {}
}

Мой вопрос: rollBack() выполняет откат всех изменений, вызванных как execute(), так и exec()? Причина использования exec() заключается в том, что мне нужно динамически создать $query2, и таким образом мне намного проще.

1 Ответ

1 голос
/ 27 октября 2011

Любые операции, выполняемые между началом транзакции и точкой, в которой вы выполняете откат, отменяются.Неважно, КАК вы выполняли эти операции - они будут отменены.

Конечно, это предполагает, что вы используете транзакционные базы данных / таблицы.Например, если ваш exec () был выполнен для таблицы MyISAM в MySQL, а execute () для таблицы InnODB, то операция InnoDB будет отменена, но вы застряли на MyISAM.

...