Перейти к содержимому

откат

Введение

MySQLi — это популярное расширение PHP, которое позволяет разработчикам взаимодействовать с базами данных MySQL. Функция mysqli_rollback() используется для отмены изменений, внесённых в базу данных во время транзакции. В этом руководстве объясняется, как она работает, и приводятся практические примеры и варианты использования.

Что такое функция отката MySQLi?

Функция mysqli_rollback() откатывает изменения, внесённые в базу данных во время транзакции. Транзакция группирует несколько операций в единый блок работы. Если какая-либо операция завершается ошибкой, mysqli_rollback() восстанавливает базу данных в состояние, которое было до начала транзакции.

Как работает функция отката MySQLi?

Функция mysqli_rollback() работает за счёт отмены изменений, внесённых в базу данных во время транзакции. Чтобы использовать эту функцию, разработчику необходимо выполнить несколько простых шагов.

Сначала разработчик должен создать подключение к серверу MySQL с помощью функции mysqli_connect(). Затем ему нужно запустить транзакцию с помощью функции mysqli_begin_transaction(). После запуска транзакции разработчик может выполнять запросы и вносить изменения в базу данных. Если какой-либо запрос завершится ошибкой, разработчик может вызвать функцию mysqli_rollback() для отмены изменений, внесённых во время транзакции.

Ниже приведён пример использования функции отката MySQLi:

php
<?php
// Create a connection to the MySQL server
$conn = mysqli_connect("localhost", "username", "password", "database");

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// Start a transaction
mysqli_begin_transaction($conn);

// Execute queries and make changes to the database
$insert = mysqli_query($conn, "INSERT INTO `my_table` (column1, column2) VALUES ('value1', 'value2')");
$update = mysqli_query($conn, "UPDATE `my_table` SET column1 = 'new_value' WHERE id = 1");

// Check if queries succeeded
if ($insert && $update) {
    // Commit the transaction if all queries succeed
    mysqli_commit($conn);
    echo "Transaction committed successfully.";
} else {
    // Rollback the changes if any query fails
    mysqli_rollback($conn);
    echo "Transaction failed and rolled back: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

В этом примере транзакция запускается с помощью функции mysqli_begin_transaction(). Выполняются запросы и вносятся изменения в базу данных. Если все запросы выполняются успешно, транзакция фиксируется. Если какой-либо запрос завершается ошибкой, изменения, внесённые во время транзакции, откатываются с помощью функции mysqli_rollback(), а ошибка записывается в журнал. (Примечание: для производственных сред рекомендуется использовать подготовленные выражения для предотвращения SQL-инъекций.)

Варианты использования функции отката MySQLi

Функция отката MySQLi полезна в различных сценариях, включая:

1. Целостность данных

Обеспечивает согласованность базы данных, откатывая частичные обновления при сбое операции, что гарантирует корректность записей.

2. Обработка ошибок

Предоставляет чистый механизм восстановления. При возникновении сбоя откат предотвращает появление «висячих» или повреждённых данных, позволяя приложению записывать в журнал и отображать понятные сообщения об ошибках.

3. Управление транзакциями

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

Преимущества функции отката MySQLi

Функция отката MySQLi предоставляет несколько технических преимуществ для разработчиков на PHP:

1. Атомарность

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

2. Упрощённая отладка

При сбое транзакции откат возвращает базу данных в предыдущее состояние, что упрощает изоляцию и исправление проблемного запроса без необходимости ручного восстановления.

3. Оптимизация производительности

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

Заключение

Функция mysqli_rollback() необходима разработчикам на PHP, которым нужно откатывать изменения в базе данных во время транзакции. Она обеспечивает целостность данных, упрощает управление транзакциями и улучшает обработку ошибок. Следуя шагам из этого руководства, разработчики смогут безопасно внедрять откат для поддержания надёжной работы с базой данных.

Практика

Какова цель функции rollback() в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.