バグ報告 > フロント機能 > トランザクション処理を組み込むとエラーが二重に |
フロント機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
acehikaru |
投稿日時: 2008/7/4 12:51
対応状況: −−−
|
半人前 登録日: 2008/6/25 居住地: 投稿: 18 |
Re: トランザクション処理を組み込むとエラーが二重に >seasoftさん
レスありがとうございます。 引用:
postgresを使っているんで、mysqlでの挙動はちょっと分からないのですが、BEGINしたあとにCOMMITやROLLBACKをしなかった場合はアボートしてROLLBACKするっぽいです。 「BEGINしたあとのSQL失敗で二重エラーになる」というのを避けるにはクエリ実行コアのDb-connをいじらないといけなそうなので、僕はトランザクション処理を外すことで対応するのが手っ取り早いかと思います。 問題のentryの箇所については、メルマガ情報(?)のインサートを想定してトランザクション処理がくみこんであるのかと思いますが、 現状はインサート文が一つだけなので、トランザクション処理は外しても問題ないです。 |
seasoft |
投稿日時: 2008/7/3 21:25
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7365 |
Re: トランザクション処理を組み込むとエラーが二重に 非常に部分的なレスですが。
引用:
ソフトの作りや設定によっては、コミットせずに終了したら、ロールバックというものも多いです。EC-CUBE は、そうなっていなそうな感じですかね?
|
acehikaru |
投稿日時: 2008/7/3 16:29
対応状況: −−−
|
半人前 登録日: 2008/6/25 居住地: 投稿: 18 |
トランザクション処理を組み込むとエラーが二重に 何をいってるかわからないかも知れないですが、そのままの現象を書きます。
会員登録処理で同時に他のテーブル(DB)にも書き込みたいと思い、トランザクション処理の確認をしたときの話です。 /data/class/pages/entry/LC_Page_Entry.php の「lfRegistData()」にあたる箇所で既にBEGINなどの処理が組み込まれているので、 このBEGINからCOMMITまでにあるインサートSQLが失敗した場合を想定して、以下のようにわざとエラーが出るように変更してみました。
を
これで実行したところ、 「システムエラーです」の画面がでるのは良いのですが、 なぜか二重に表示されます。 <HTML>〜<HTML>のソースが二重に出力されました。 ログを見ると、 どうやらクエリ実行のタイミングで一度エラーページを出力していますが、クエリがエラーになると以降の処理が全て無視されるようで、 トランザクションが正しく終了していないというエラーのため、もう一度エラーページを出力。 となっているようです。 この仕様だとROLLBACKできないのでトランザクションの意味がないと思うのですが… 説明がうまくできないんですが、会員登録時のエラー処理がおかしいのでは?という話です。 |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |