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 5)
ibase_trans — トランザクションを開始する
説明
$trans_args
[, resource $link_identifier
]] )$link_identifier
[, int $trans_args
]] )トランザクションを開始します。
注意:
ibase_trans() を最初にコールした際には、接続の デフォルトのトランザクションを返しません。 ibase_trans() によって開始されたすべてのトランザクションは、 ibase_commit() や ibase_rollback() を使用してコミットあるいは ロールバックを明示的に行わない限り、スクリプトの終了時に自動的に ロールバックされます。
注意:
この関数は複数の
trans_argsおよびlink_identifierを指定することが可能です。これにより、 複数のデータベース接続にまたがるトランザクションを扱えるようになり、 2 フェーズコミット機能を使用したコミットが可能になります。つまり、複数の データベースの更新内容が成功したか失敗したかによる判断ができるということです。 これは、ひとつのクエリで異なるデータベースのテーブルを同時に使用できるという ことではありません!複数データベースにまたがるトランザクションを使用する場合、 ibase_query() および ibase_prepare() をコールする際には
link_idおよびtransaction_idの両方を指定する必要があります。
パラメータ
-
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 リンク ID。省略した場合は、 最後にオープンしたリンクを使用します。
返り値
トランザクションハンドル、あるいはエラー時に FALSE を返します。
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.
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);
