PHP 5.2.2とExceptionと私
通常、Windows上の開発環境で開発してるわけなんですが、こちらでは何も問題なかったわけです。
しかし、Linux上の実行環境に移行したら、「There is already an active transaction」というPDOExceptionが発生。あ?
S2Dao.PHP5を使うAppManagerを1つ追加しただけなんだけど。
で、追いかけていくとS2Dao.PHP5がトランザクションをbeginしているところで例外が発生している。Windowsでは何も問題おきなかったのに。
調べてもDAOPHP-3にしかたどり着かない。v1.1.2を使っているので問題ないはずだ。
S2Dao.PHP5と別にPDOにアクセスしてるライブラリがあるからか?でも今まで動いてたしなぁ。
ってことで、S2Dao.PHP5をひたすら追いかけると、どうやら例外がキャッチ出来ていないらしい。なんで?
try {
if(!$this->begin){
$this->connection->beginTransaction();
}
} catch(Exception $e){
// TODO: No Operation
}
となっているのに、PDOExceptionがキャッチできない。
catchにPDOExceptionを追加してもダメ。
try〜catch自体が動いていない感じ。これはPHP自体がおかしいと考えたほうがよさそうだ。
Windows環境はPHP v5.2.1、Linux環境はPHP v5.2.2。これか?
PHPのChangeLogを見てもそれらしきものは無し。mysqlのfetchでexception云々はあるけど、fetch以前の話だし。
PDOのバージョンでも変わったか?と思ったらPECLにつながらない(-_-; Googleのキャッシュから見るに、PDOもバージョンは変わってなさそう。
…動いた。
PHPって怖い!いつものことだけど。
まぁ、導入していたのは非公式ビルドのv5.2.2だったので何ともいえません。でもv5.2.0は#39364のバグがあるから早く移行したい…。セキュリティパッチは当たってるんだけどねぇ。
追記(5/29)
どうやらeAcceleratorのTicket #242が原因っぽい。PHP Bugs: #41406やPHP Bugs: #41468でもオプティマイザが原因だとされてるし。すでに確かめる環境がないけど(^-^;