PHP?Oracle??でハマる。
OracleのテーブルをUPDATEするメソッドを作っていたときの話。
トランザクションが始まると
「トランザクションを開始しました」
というログが吐かれるようになっているのですが、そのログが
「トランザクションを開始しました」
「トランザクションを開始しました」
「トランザクションを開始しました」
「トランザクションを開始しました」
「トランザクションを開始しました」
「トランザクションを開始しました」
…
のように無限ループ的に吐かれて、結局、UPDATE文は実行されずに落ちてしまう、
という現象が起こりました(゚Д゚)!!!
自力で解決をするのが難しいと思ったので、以前に似たようなシステムを
作っていた人に聞いてみたところ、
「DAOのメソッド名と、DAOで呼んでいるSQL名とが同じになっていませんか?」
と言われました。
$DAO->methodChoo();
methodA(){
// SQL実行
$this->methodChoo();
}
…となっていたところを、
$DAO->methodChoo();
methodA(){
// SQL実行
$this->methodChooSql();
}
…と修正したところ、上記の妙な現象は起こらなくなりました(・∀・)
今回携わったシステム独自の仕様とは言え、他のシステムでも同じようにハマるかも
しれないので、念のため書いておくことにしました。