oci_commit
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_commit — Подтверждает транзакцию базы данных
Описание
$connection
) : bool
Подтверждает транзакцию соединения connection
.
Подтверждение завершает текущую транзакцию и делает все изменения
постоянными. Она также освобождает все установленные блокировки.
Транзакция начинается при первом SQL-запросе, изменяющим данные,
который был запущен с помощью функции oci_execute()
и флага OCI_NO_AUTO_COMMIT
. Последующие изменения
данных от других запросов также становятся частью данной транзакции.
Изменения, сделанные в транзакции, являются временными до тех пор,
пока транзакция не будет зафиксирована или пока не будет произведен ее откат.
Другие пользователи базы данных не смогут увидеть изменения до их подтверждения.
При вставке или обновлении данных рекомендуется использовать транзакции для сохранения целостности данных и увеличения производительности.
Список параметров
-
connection
-
Идентификатор соединения Oracle, полученный из функций oci_connect(), oci_pconnect() или oci_new_connect().
Возвращаемые значения
Возвращает true
в случае успешного завершения или false
в случае возникновения ошибки.
Примеры
Пример #1 Пример использования oci_commit()
<?php
// Вставка в несколько таблиц, откат изменений в случае ошибки
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, "INSERT INTO mysalary (id, name) VALUES (1, 'Chris')");
// Флаг OCI_NO_AUTO_COMMIT сообщает Oracle не фиксировать запрос INSERT при его поступлении
// Для PHP <= 5.3.1 используйте OCI_DEFAULT, эти два флага эквивалентны
$r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
if (!$r) {
$e = oci_error($stid);
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$stid = oci_parse($conn, 'INSERT INTO myschedule (startday) VALUES (12)');
$r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
if (!$r) {
$e = oci_error($stid);
oci_rollback($conn); // откат изменений из обоих таблиц
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
// Фиксация изменений в обоих таблицах
$r = oci_commit($conn);
if (!$r) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>
Примечания
Замечание:
Транзакции будут автоматически откачены при закрытии соединения или окончании скрипта (в зависимости от того, что случится раньше). Для подтверждения транзакции необходимо явно вызвать функцию oci_commit().
Все вызовы oci_execute(), явно или по умолчанию использующие режим
OCI_COMMIT_ON_SUCCESS
зафиксируют любую предыдущую незафиксированную транзакцию.Любой DDL-запрос Oracle, такой как
CREATE
илиDROP
автоматически подтверждает любую незавершенную транзакцию.
Смотрите также
- oci_execute() - Выполняет подготовленное выражение
- oci_rollback() - Откатывает транзакции, ожидающие обработки