データベース操作に使用するオブジェクトがそれぞれmysqli
の2つのクラスに分かれています。複数のmysqliオブジェクトを使用したPHPトランザクション処理
class A{
protected $mysqliObject;
public function __constructor(){
$this->mysqliObject=new mysqli(...)
}
public function doSomething(){
$this->mysqliObject->query(...);
}
}
class B{
protected $mysqliObject;
public function __constructor(){
$this->mysqliObject=new mysqli(...)
}
public function doSomething(){
$this->mysqliObject->query(...);
}
}
doSomething()
方法は、(SELECTは、UPDATE、...等、DELETE)データベースクエリのため$mysqliObject
を使用しています。私は以下の外部をしたい:
// Start point
$aObject=new A();
$bObject=new B();
$aObject->doSomething();
$bObject->doSomething();
// End point
...しかし、いずれかが失敗した場合、両方のクエリをロールバックしたい。どうやってやるの?
- 私は「始点」で新しい
mysqli
オブジェクトを作成し、「エンドポイント」class A
とclass B
のデータベースクエリでそれがコミットまたはロールバックするために使用することはできますか? - 外部に作成し、
__constructor()
のとclass B
に同じ$mysqliObject
を渡して、ロールバックまたはコミット(外部)する必要があります。
pro-conでさらに技術を見たいですか?
基本的に私の質問は、別のアプローチを尋ねることを意味しました。たぶん私はちょっとチートして窓からOOPを投げたかったのかもしれません。あなたが言及したように進めます。 – Dyin
これで幸運です。想像上のプログラムではうまくいくかもしれませんが、実際には[コマンドは同期していません](http://dev.mysql.com/doc/refman/5.0/ja/commands-out-of-sync.html) 。問題は明らかにmysqliの使用を述べています。 – doug65536