РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
242 of 258 menu

Метод rollBack

Метод rollBack класса Connection откатывает активную транзакцию, отменяя все SQL-запросы, выполненные после вызова метода beginTransaction. Если транзакция не была начата, метод выбрасывает исключение. Параметров метод не принимает.

Синтаксис

public function rollBack(): bool

Пример

Давайте начнём транзакцию, вставим запись, а затем откатим изменения:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/rollback', name: 'article_rollback')] public function rollback(): Response { $conn = $this->getDoctrine()->getConnection(); $conn->beginTransaction(); $conn->insert('article', ['title' => 'abcde']); $conn->rollBack(); $res = $conn->fetchAllAssociative('SELECT * FROM article'); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

[]

Как видите, вставленная запись не сохранилась, так как транзакция была отменена.

Пример

Давайте начнём транзакцию, обновим запись и откатим изменения:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/rollback-update', name: 'article_rollback_update')] public function rollbackUpdate(): Response { $conn = $this->getDoctrine()->getConnection(); $conn->beginTransaction(); $conn->update('article', ['title' => 'hello'], ['id' => 1]); $conn->rollBack(); $res = $conn->fetchAssociative('SELECT * FROM article WHERE id = ?', [1]); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

{"id": 1, "title": "article"}

Запись осталась в исходном состоянии, так как откат вернул её к значению до начала транзакции.

Смотрите также

  • класс Connection,
    который управляет соединением с базой данных
  • метод beginTransaction,
    который начинает новую транзакцию
  • метод commit,
    который фиксирует текущую транзакцию
  • метод isTransactionActive,
    который проверяет активность транзакции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить