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 - Manual: ibase_trans
2024-11-15
(PHP 5, PHP 7 < 7.4.0)
ibase_trans — Begin a transaction
$trans_args
= ?, resource $link_identifier
= ?): resource$link_identifier
= ?, int $trans_args
= ?): resourceBegins a transaction.
注意:
The first call to ibase_trans() will not return the default transaction of a connection. All transactions started by ibase_trans() will be rolled back at the end of the script if they were not committed or rolled back by either ibase_commit() or ibase_rollback().
注意:
This function will accept multiple
trans_args
andlink_identifier
arguments. This allows transactions over multiple database connections, which are committed using a 2-phase commit algorithm. This means you can rely on the updates to either succeed in every database, or fail in every database. It does NOT mean you can use tables from different databases in the same query!If you use transactions over multiple databases, you will have to specify both the
link_id
andtransaction_id
in calls to ibase_query() and ibase_prepare().
trans_args
trans_args
can be a combination of
IBASE_READ
,
IBASE_WRITE
,
IBASE_COMMITTED
,
IBASE_CONSISTENCY
,
IBASE_CONCURRENCY
,
IBASE_REC_VERSION
,
IBASE_REC_NO_VERSION
,
IBASE_WAIT
and
IBASE_NOWAIT
.
link_identifier
An InterBase link identifier. If omitted, the last opened link is assumed.
Returns a transaction handle, or false
on error.
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);