0Pricing
PHP Academy · Урок

Транзакции с PDO

Объединяйте несколько запросов в атомарные транзакции с помощью beginTransaction и commit

«Транзакции с PDO» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Что такое транзакция

Транзакция объединяет несколько операторов SQL в одну атомарную единицу: либо все успешно фиксируются, либо все откатываются.

Свойства ACID

Транзакции гарантируют свойства ACID: атомарность, согласованность, изолированность и долговечность.

beginTransaction()

Начните транзакцию с помощью $pdo->beginTransaction(). Автоматическая фиксация отключается до вызова commit() или rollBack().

commit()

Навсегда сохраняет все изменения, выполненные после beginTransaction().

rollBack()

Отменяет все изменения, выполненные после beginTransaction(), возвращая базу данных в состояние до начала транзакции.

Шаблон транзакции

Всегда оборачивайте транзакции в try/catch:

<?php
try {
    $pdo->beginTransaction();

    $pdo->prepare("UPDATE accounts SET balance = balance - ? WHERE id = ?")
        ->execute([100, $senderId]);

    $pdo->prepare("UPDATE accounts SET balance = balance + ? WHERE id = ?")
        ->execute([100, $receiverId]);

    $pdo->commit();
} catch (PDOException $e) {
    $pdo->rollBack();
    throw $e;
}

Точки сохранения

PDO не поддерживает вложенные транзакции изначально. Используйте команды SQL SAVEPOINT для частичного отката внутри транзакции.

inTransaction()

Проверьте, активна ли транзакция, с помощью $pdo->inTransaction(). Возвращает true или false.

Режим автоматической фиксации

По умолчанию PDO работает в режиме автоматической фиксации: каждый оператор немедленно фиксируется. beginTransaction() отключает автоматическую фиксацию.

Уровни изоляции

MySQL поддерживает: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ (по умолчанию), SERIALIZABLE. Установите уровень с помощью $pdo->exec("SET TRANSACTION ISOLATION LEVEL READ COMMITTED").

Когда использовать транзакции

Используйте их для банковских переводов, оформления заказа с уменьшением запасов и любой записи в несколько таблиц, при которой частичное выполнение недопустимо.

DDL и транзакции

В MySQL операторы DDL (CREATE TABLE, ALTER TABLE) вызывают неявную фиксацию. Откатить DDL внутри транзакции невозможно.

Быстрая проверка

Что делает rollBack()?

Часто задаваемые вопросы

Урок «Транзакции с PDO» бесплатный?

Да — полный текст урока «Транзакции с PDO» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Транзакции с PDO»?

Объединяйте несколько запросов в атомарные транзакции с помощью beginTransaction и commit Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Транзакции с PDO»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Подключение к MySQL с помощью PDO
  2. Подготовленные выражения и привязка параметров
  3. Получение результатов с помощью PDO
  4. Транзакции с PDO
← Назад к PHP Academy