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.
(PHP 5, PHP 7 < 7.4.0)
ibase_trans — Начинает транзакцию
Начинает транзакцию.
Замечание:
Первый вызов 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
в случае возникновения ошибки.
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.
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.
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);