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

автофиксация

В этой статье мы рассмотрим функцию mysqli_autocommit() в PHP, которая используется для включения или отключения режима автофиксации (autocommit) в транзакциях MySQLi. Мы предоставим обзор функции, объясним принцип её работы и приведём примеры использования.

Введение в функцию mysqli_autocommit()

Функция mysqli_autocommit() является встроенной функцией PHP, предназначенной для переключения режима автофиксации в транзакциях MySQLi. Когда автофиксация включена, каждое SQL-выполнение рассматривается как отдельная транзакция и фиксируется автоматически. При отключении автофиксации вам необходимо явно фиксировать или откатывать транзакции с помощью функций mysqli_commit() и mysqli_rollback().

Как использовать функцию mysqli_autocommit()

Использование функции mysqli_autocommit() очень просто. Вам нужно лишь вызвать функцию и передать ей действительное соединение MySQLi и логическое значение, определяющее состояние автофиксации.

Параметры:

  • connection (процедурный) / $mysqli (ООП): Объект соединения MySQLi.
  • mode (bool): TRUE для включения автофиксации, FALSE для её отключения.

Возвращаемое значение: Возвращает TRUE при успехе, FALSE при ошибке.

Примечание: MySQLi поддерживает как объектно-ориентированный, так и процедурный синтаксис. В примерах ниже используется метод ООП $mysqli->autocommit(). Процедурный аналог: mysqli_autocommit($link, $mode).

Вот пример:

Как использовать функцию mysqli_autocommit()

php
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

$mysqli->autocommit(FALSE);

$mysqli->query("INSERT INTO users (name, email) VALUES ('John', '[email protected]')");
$mysqli->query("UPDATE users SET name='John Doe' WHERE id=1");

$mysqli->commit();

$mysqli->autocommit(TRUE);

$mysqli->close();
?>

В этом примере мы создаём новый объект MySQLi и отключаем автофиксацию, вызывая функцию autocommit() с аргументом FALSE. Затем мы выполняем два запроса для вставки и обновления данных в таблице users. Транзакция фиксируется путём вызова функции commit() объекта MySQLi.

После этого мы снова включаем автофиксацию, вызывая функцию autocommit() с аргументом TRUE. В завершение мы закрываем соединение MySQLi с помощью метода close() объекта MySQLi.

Расширенное использование

Функция mysqli_autocommit() работает на уровне соединения. При переключении автофиксации с FALSE на TRUE MySQLi автоматически фиксирует все ожидающие транзакции. Такое поведение полезно при последовательном управлении несколькими независимыми транзакциями в рамках одного скрипта. Вот пример:

Расширенное использование PHP autocommit()

php
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

// Start and commit the first transaction
$mysqli->autocommit(FALSE);
$mysqli->query("INSERT INTO users (name, email) VALUES ('John', '[email protected]')");
$mysqli->commit();

// Start and commit the second transaction
$mysqli->autocommit(FALSE);
$mysqli->query("UPDATE users SET name='John Doe' WHERE id=1");
$mysqli->commit();

// Re-enable autocommit for subsequent queries
$mysqli->autocommit(TRUE);

$mysqli->close();
?>

В этом примере мы отключаем автофиксацию и выполняем запрос INSERT. Затем мы явно фиксируем первую транзакцию. Далее мы снова отключаем автофиксацию для запуска второй транзакции, выполняем запрос UPDATE и фиксируем её. В завершение мы снова включаем автофиксацию и закрываем соединение MySQLi.

Заключение

Подводя итог, функция mysqli_autocommit() является мощным инструментом для включения или отключения режима автофиксации в транзакциях MySQLi в PHP. Понимание принципов работы функции и сценариев её расширенного использования позволит вам эффективно применять эту возможность для создания надёжных и гибких транзакций MySQL в ваших PHP-скриптах. Помните, что при отключенной автофиксации необходимо всегда явно фиксировать или откатывать транзакции, чтобы обеспечить целостность и согласованность данных в вашей базе данных.

Практика

Что делает режим autocommit в PHP?

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

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