🔎

«START TRANSACTION» в PHP. Для чого використовувати?

Поясни для чого використовувати цей кусок коду PHP, і коли його потрібно використовувати .
$db->query("START TRANSACTION");
try {
// UPDATE
// INSERT / DELETE
$db->query("COMMIT");
} catch (Throwable $e) {
$db->query("ROLLBACK");
exit(json_encode(['ErrorMessage' => 'Помилка збереження.']));
}
php
1 відповідь
  • Віктор
    Цей фрагмент коду — керування транзакцією бази даних. Він використовується, коли одна логічна операція складається з кількох SQL-запитів, і всі вони мають виконатися разом або не виконатися взагалі. Простими словами, транзакція — це «пакет» змін у базі даних. Тобто алгоритм такий:

    ✅ Успіх → усі зміни зберігаються

    ❌ Помилка → усі зміни скасовуються

    Тобто база даних ніколи не залишається в напівзламаному стані.

    Розбір твого коду по рядках
    $db->query("START TRANSACTION");
    🔹 Початок транзакції
    З цього моменту всі SQL-запити виконуються тимчасово, поки не буде COMMIT.
    try {
    // UPDATE questions
    // INSERT / DELETE tags
    🔹 Тут ви виконуєте кілька взаємопов’язаних дій, наприклад: UPDATE, INSERT, DELETE...
    $db->query("COMMIT");
    🔹 Підтвердження транзакції

    👉 Усі зміни стають постійними.
    } catch (Throwable $e) {
    $db->query("ROLLBACK");
    🔹 Якщо будь-яка помилка (SQL, PHP, логіка):

    усі зміни відкочуються

    база повертається до стану до START TRANSACTION
        exit(json_encode(['ErrorMessage' => 'Помилка збереження.']));
    }
    🔹 Користувач отримує одне зрозуміле повідомлення, а не зламані дані.

    Використовуйте ЗАВЖДИ, якщо:

    ✅ 1. Кілька SQL-запитів залежать один від одного

    ✅ 2. Дані мають бути логічно узгодженими

    ✅ 3. Адмін-панель / масові операції

    Можна обійтися без транзакції, якщо:

    ❌ один простий INSERT

    ❌ немає залежних таблиць

    ❌ помилка не ламає логіку