MYSQLで分散トランザクションを行いたいと思い、以下ページを参考に試行錯誤しておりますが、具体的な方法が解らず、他に情報も少なく苦労しております。

http://dev.mysql.com/doc/refman/5.1/ja/xa-statements.html

現在試した具体的なコードは、文字数の制限で投稿出来なかったので「コメント欄」に掲載させて頂きますが、どこが間違っているのでしょうか。現状では DB bar へのインサートは行われましたが、DB foo へのインサートが行われない状況です。また、ロールバックも正常に機能しておりません。

「複数DBへデータをインサート→コミット」、「エラーなら複数DBに対しロールバック」ということが行いたいのですが、、、具体的なPHPコードをお教え頂けると嬉しいです。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2008/07/31 13:27:09
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:falcon2 No.1

回答回数331ベストアンサー獲得回数2

これは検索ではなく仕事です

id:uniuniko

参考サイトでも構いません

2008/07/29 02:23:11
id:nyarco No.2

回答回数1ベストアンサー獲得回数0

ポイント70pt

PHPではないのですが・・・

参考になれば幸いです。

http://www.ogis-ri.co.jp/otc/hiroba/technical/DTP/step1/index.ht...

id:uniuniko

ご回答ありがとう御座います!

参考にさせて頂きます。

2008/07/31 13:25:22
  • id:uniuniko
    //試したコードは以下になります


    try {
    //DB foo へ接続
    $dbh = DB::connect('foo');

    //DB foo へ データをインサート
    $dbh->query("XA START 'xatest';");
    $dbh->query("INSERT INTO table (column) VALUES(tes);");
    $dbh->query("XA END 'xatest';");
    $dbh->query("XA PREPARE 'xatest';");

    //DB bar へ接続
    $dbh = DB::connect('bar');

    //DB bar へ データをインサート
    $dbh->query("XA START 'xatest';");
    $dbh->query("INSERT INTO table (column) VALUES(tes);");
    $dbh->query("XA END 'xatest';");
    $dbh->query("XA PREPARE 'xatest';");

    //コミット
    $dbh->query("XA COMMIT 'xatest';");

    } catch (Exception $e) {
    //ロールバック
    $dbh->query("XA ROLLBACK 'xatest';");
    echo "失敗しました。" . $e->getMessage();
    die();
    }

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません