PHP 8.5.0 Alpha 2 available for testing

PDO::commit

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDO::commit Фиксирует транзакцию

Описание

public PDO::commit(): bool

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

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.

Ошибки

Вызывает исключение PDOException, если нет активной транзакции.

Замечание: Исключение выбрасывается, даже если для атрибута PDO::ATTR_ERRMODE не установили режим PDO::ERRMODE_EXCEPTION.

Примеры

Пример #1 Фиксация обычной транзакции

<?php
/* Начало транзакции, отключение автоматической фиксации */
$dbh->beginTransaction();

/* Вставка множества записей по принципу "все или ничего" */
$sql = 'INSERT INTO fruit
(name, colour, calories)
VALUES (?, ?, ?)'
;

$sth = $dbh->prepare($sql);

foreach (
$fruits as $fruit) {
$sth->execute(array(
$fruit->name,
$fruit->colour,
$fruit->calories,
));
}

/* Фиксация изменений */
$dbh->commit();

/* Соединение с базой данных снова в режиме автоматической фиксации */
?>

Пример #2 Фиксация DDL-транзакции

<?php
/* Начало транзакции, отключение автоматической фиксации */
$dbh->beginTransaction();

/* Изменение схемы базы данных */
$sth = $dbh->exec("DROP TABLE fruit");

/* Фиксация изменений */
$dbh->commit();

/* Соединение с базой данных снова в режиме автоматической фиксации */
?>

Замечание: Не все базы данных позволяют транзакциям работать с DDL-выражениями: в некоторых генерируются ошибки, тогда как в других (включая MySQL) транзакция автоматически фиксируется после первого встретившегося DDL-выражения.

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

Добавить

Примечания пользователей 1 note

up
4
re_action
10 years ago
Keep in mind this bug: https://bugs.php.net/bug.php?id=66528

you could not rely on commit() return value while using MySql
To Top