バージョン選択

フォーラム

メニュー

オンライン状況

36 人のユーザが現在オンラインです。 (9 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 36
もっと...

サイト内検索

バグ報告 > フロント機能 > トランザクション処理を組み込むとエラーが二重に

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
acehikaru
投稿日時: 2008/7/3 16:29
対応状況: −−−
半人前
登録日: 2008/6/25
居住地:
投稿: 18
トランザクション処理を組み込むとエラーが二重に
何をいってるかわからないかも知れないですが、そのままの現象を書きます。

会員登録処理で同時に他のテーブル(DB)にも書き込みたいと思い、トランザクション処理の確認をしたときの話です。

/data/class/pages/entry/LC_Page_Entry.php
の「lfRegistData()」にあたる箇所で既にBEGINなどの処理が組み込まれているので、
このBEGINからCOMMITまでにあるインサートSQLが失敗した場合を想定して、以下のようにわざとエラーが出るように変更してみました。

       //-- 仮登録実行
        $objConn->query("BEGIN");

        $objQuery = new SC_Query();
        $objQuery->insert("dtb_customer", $arrRegist); 


        //-- 仮登録実行
        $objConn->query("BEGIN");

        $objQuery = new SC_Query();
        $objQuery->insert("db_customer", $arrRegist); 

これで実行したところ、
「システムエラーです」の画面がでるのは良いのですが、
なぜか二重に表示されます。
<HTML>〜<HTML>のソースが二重に出力されました。

ログを見ると、
どうやらクエリ実行のタイミングで一度エラーページを出力していますが、クエリがエラーになると以降の処理が全て無視されるようで、
トランザクションが正しく終了していないというエラーのため、もう一度エラーページを出力。
となっているようです。

この仕様だとROLLBACKできないのでトランザクションの意味がないと思うのですが…

説明がうまくできないんですが、会員登録時のエラー処理がおかしいのでは?という話です。
seasoft
投稿日時: 2008/7/3 21:25
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: トランザクション処理を組み込むとエラーが二重に
非常に部分的なレスですが。

引用:

この仕様だとROLLBACKできないのでトランザクションの意味がないと思うのですが…


ソフトの作りや設定によっては、コミットせずに終了したら、ロールバックというものも多いです。EC-CUBE は、そうなっていなそうな感じですかね?


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

acehikaru
投稿日時: 2008/7/4 12:51
対応状況: −−−
半人前
登録日: 2008/6/25
居住地:
投稿: 18
Re: トランザクション処理を組み込むとエラーが二重に
>seasoftさん
レスありがとうございます。

引用:

ソフトの作りや設定によっては、コミットせずに終了したら、ロールバックというものも多いです。EC-CUBE は、そうなっていなそうな感じですかね?


postgresを使っているんで、mysqlでの挙動はちょっと分からないのですが、BEGINしたあとにCOMMITやROLLBACKをしなかった場合はアボートしてROLLBACKするっぽいです。

「BEGINしたあとのSQL失敗で二重エラーになる」というのを避けるにはクエリ実行コアのDb-connをいじらないといけなそうなので、僕はトランザクション処理を外すことで対応するのが手っ取り早いかと思います。

問題のentryの箇所については、メルマガ情報(?)のインサートを想定してトランザクション処理がくみこんであるのかと思いますが、
現状はインサート文が一つだけなので、トランザクション処理は外しても問題ないです。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は78,100名です
総投稿数は106,040件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2279
5
umebius
2085
6
yuh
1745
7
red
1558
8
h_tanaka
1301
9
tsuji
957
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.