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 — Prépare une transaction interBase
Prépare une transaction interBase.
Note:
Le premier appel à ibase_trans() retournera la transaction par défaut pour la connexion courante. Toutes les transactions commencées par ibase_trans() seront annulées à la fin de l'exécution du script si elles n'ont pas été validées ou annulées par respectivement les fonctions ibase_commit() ou ibase_rollback().
Note:
ibase_trans() accepte plusieurs paramètres
trans_args
etlink_identifier
. Ceci permet d'effectuer des transactions sur plusieurs connexions à des bases de données différentes, qui seront validées en utilisant l'algorithme2-phase
. Cela signifie que vous pouvez mettre à jour plusieurs bases de données. Cela ne veut PAS dire que vous pouvez utiliser plusieurs bases de données dans une même requête !Si vous utilisez les transactions sur plusieurs base de données, vous devez spécifier
link_id
ettransaction_id
dans les fonctions ibase_query() et ibase_prepare().
trans_args
trans_args
peut être une combinaison des constantes
suivantes :
IBASE_READ
,
IBASE_WRITE
,
IBASE_COMMITTED
,
IBASE_CONSISTENCY
,
IBASE_CONCURRENCY
,
IBASE_REC_VERSION
,
IBASE_REC_NO_VERSION
,
IBASE_WAIT
et
IBASE_NOWAIT
.
link_identifier
Un identifiant de connexion à InterBase. S'il est omis, la dernière connexion ouverte sera utilisée.
Retourne une ressource de transaction, ou false
si une
erreur survient.
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);