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.
ibase_trans
(PHP 4, PHP 5)
ibase_trans — Prépare une transaction interBase
Description
$trans_args
[, resource $link_identifier
]] )$link_identifier
[, int $trans_args
]] )Prépare une transaction interBase.
Note:
Le comportement de cette fonction a changé depuis PHP 5.0.0. 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:
Dans les versions 5.0.0 de PHP et suivantes, ibase_trans() accepte plusieurs paramètres
trans_argsetlink_identifier. Ceci permet d'effectuer des transactions sur plusieurs connexions à des bases de données différentes, qui seront validées en utilisant l'algorithme 2-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_idettransaction_iddans les fonctions ibase_query() et ibase_prepare().
Liste de paramètres
-
trans_args -
trans_argspeut être une combinaison des constantes suivantes :IBASE_READ,IBASE_WRITE,IBASE_COMMITTED,IBASE_CONSISTENCY,IBASE_CONCURRENCY,IBASE_REC_VERSION,IBASE_REC_NO_VERSION,IBASE_WAITetIBASE_NOWAIT. -
link_identifier -
Un identifiant de connexion à InterBase. S'il est omis, la dernière connexion ouverte sera utilisée.
Valeurs de retour
Retourne une ressource de transaction, ou FALSE si une
erreur survient.
Example of using ibase_trans with ibase_prepare and ibase_execute:
$dbh = ibase_connect( ... );
$sql = " ... ";
$trans = ibase_trans( IBASE_DEFAULT,$dbh );
$sth = ibase_prepare( $trans, $sql );
$res = ibase_execute( $sth, $params_if_any );
if ($res == false) {
//log failure if you want
}
ibase_commit($trans);
//free if needed
ibase_free_query($sth);
unset($res);
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.
