@daMage

Для чего нужен pdo rollback?

На PHPIxie заметил такой код

$database->beginTransaction();
// ...
try {
    // ...
    $database->commitTransaction();
} catch(\Exception $e) {
    $database->rollbackTransaction();
    throw $e;
}


Обьясните, пожалуйста, зачем тут нужен откат транзакции, если все изменения фиксируются при коммите, а исключение и так прервет программу? Просто в своих моделях я никогда не использовал rollback, обычно хватает исключений или return false. Может я чего-то не так делаю и засоряется какой-нибудь журнал mysql?
  • Вопрос задан
  • 473 просмотра
Решения вопроса 2
Denormalization
@Denormalization
Each transaction is stored in the binary log in one chunk, upon COMMIT. Transactions that are rolled back are not logged.


Rolling back can be a slow operation that may occur implicitly without the user having explicitly asked for it (for example, when an error occurs).


Beginning a transaction also causes table locks acquired with LOCK TABLES to be released


От сюда
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Обьясните, пожалуйста, зачем тут нужен откат транзакции, если все изменения фиксируются при коммите, а исключение и так прервет программу?

Rollback нужен не для того, чтобы прервать транзакцию, а чтобы отменить изменения, сделанные в ней. Представьте, что вы осуществляете внутриигровую покупку - платите пользователю 100500 галактических кредитов, а он вам за это отдает Банхаммер Добра и Света. Только вот на середине транзакции произошел сбой - какое-то исключение выбросилось. Деньги с вас списались, а вот предмет владельца не сменил. Именно в этот момент транзакцию нужно откатить - вы же не хотите остаться без денег?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы