ibase_trans

(PHP 5, PHP 7 < 7.4.0)

ibase_transНачинает транзакцию

Описание

ibase_trans(int $trans_args = ?, resource $link_identifier = ?): resource
ibase_trans(resource $link_identifier = ?, int $trans_args = ?): resource

Начинает транзакцию.

Замечание:

Первый вызов ibase_trans() не вернёт транзакцию соединения по умолчанию. Все транзакции, запущенные с помощью ibase_trans(), будут отменены в конце скрипта, если они не были зафиксированы, или будут отменены с помощью ibase_commit() или ibase_rollback().

Замечание:

Эта функция принимает несколько аргументов trans_args и link_identifier. Это позволяет выполнять транзакции через несколько соединений с базой данных, которые фиксируются с использованием алгоритма двухэтапной фиксации. Это означает, что вы можете рассчитывать на то, что обновления будут успешными в каждой базе данных или завершатся ошибкой в каждой базе данных. Это НЕ означает, что вы можете использовать таблицы из разных баз данных в одном запросе!

Если вы используете транзакции в нескольких базах данных, вам нужно будет указать как link_id, так и transaction_id в вызовах ibase_query() и ibase_prepare().

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

trans_args

trans_args может быть комбинацией IBASE_READ, IBASE_WRITE, IBASE_COMMITTED, IBASE_CONSISTENCY, IBASE_CONCURRENCY, IBASE_REC_VERSION, IBASE_REC_NO_VERSION, IBASE_WAIT и IBASE_NOWAIT.

link_identifier

Идентификатор ссылки InterBase. Если не указан, предполагается последняя открытая ссылка.

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

Возвращает дескриптор транзакции или false в случае возникновения ошибки.

add a note add a note

User Contributed Notes 3 notes

up
2
chAlx
13 years ago
Note that on some platforms ibase_trans($dbh), ibase_trans(IBASE_DEFAULT, $dbh) and ibase_trans($dbh, IBASE_DEFAULT) are not the same, but will run without errors in most cases.
up
2
jon at tgpsolutions dot com
22 years ago
When using transactions, you must execute queries using the transaction identifier as the link_identifier in ibase_query. 

Example:

$db = ibase_connect( ... );
$tr = ibase_trans();
$result = ibase_query($tr, $sql1);
$result = ibase_query($tr, $sql2);
ibase_rollback($tr);

You must use ibase_query($tr, $sql1).  Calling ibase_query($db, $sql1) will not allow you to roll back - it will be commited when the script finishes executing.
up
1
marti at delfos dot net
6 years ago
Prevent lock conflicts example:

$db = ibase_connect( ... );
$tr = ibase_trans(IBASE_COMMITTED + IBASE_NOWAIT, $db);
$result = ibase_query($tr, $sql);
ibase_commit($tr);
ibase_close($dh);
To Top