モンスターカレンダー

« 2004年12月 »
12345678910111213141516171819202122232425262728293031

2004年12月アーカイブ

DB_DataObjectのトランザクション処理。(以下サンプルコード。typoあるかも)


$tbl = DB_DataObject::factory("target_table");
$db = $tbl->getDatabaseConnection(); //これでDBオブジェクトがとれる
$db->autoCommit(False);
$db->query("BEGIN"); //トランザクション開始
$db->query("LOCK TABLE target_table IN SHARE ROW EXCLUSIVE MODE");
//必要に応じてロックレベルを設定。これはPostgreSQLのもの

//$tblにいろいろ値をセットする処理
// :
$cnt = $tbl->update();
if (PEAR::isError($tbl->_lastError) { //エラー判定
$db->query("ROLLBACK"); //ロールバック
return False;
}
if (cnt <= 0) {
$db->query("ROLLBACK");
return False;
}

$db->query("COMMIT"); //正常ならコミット
return True;

要は DBオブジェクトを取得してしまい、後はqueryメソッドで制御するという方法。

複数のテーブルを同じトランザクションでも制御できるんですが、
最初のDataObjectのオブジェクトを作ってからでないとDBオブジェクトがとれな
いのでスマートな作りとはいえません。。が、仕方なくやってます。

#自力でsetDatabaseConnection()を作る方法もあると助言もらいながらも
#時間の都合でまだ果たせず。。

PHP-Usersに投稿したのを機会にこちらにもUPです。

PEAR : Auth なんだか雑誌の通りには動かんし...と思ってたら、自分のは最新安定版1.2.3、
雑誌のはベータ版1.3.0r3 対象だった。

しかしベータ版にするのもためらわれる。。と1.2.3でも動くように作りこんでいたが、どうかんがえても、実行してみてもソース見てみてもおかしいバグあり。
件のベータ版を別マシンに落としてきてソース見たらきちんと修正済み。
...速攻でupgradeしました。

結構な時間を費やしてしまったような気がする。

ちなみにAuthの記事が載っていたのは↓「PHPプログラマーズマガジン 11月号」。
http://www.phppro.jp/index.html

コレはいいです。今までAuthについてあったらいいのに、と思われることがいっぱい載ってました。PEARマニュアルの修正(翻訳)お手伝いしようかとも思っていたことがあったけどこれでもう必要ない気が。

=== 追加 ===
$data = $a->getAuthData();

では、username と password はとれません。
username は getUsername() で個別にとれます。
password は、なかったような。。。。