• 締切済み

複数テーブルの更新方法について

会員情報の登録処理について 会員情報を管理するテーブルが3つあります。 もし、下記の(2)(3)でエラーのとき 中途半端に会員基本情報のみ出来てしまいます。 このときロールバックみたいな機能があるのでしょうか? みなさんは、このような場合どのように対応しているのでしょうか? ご指導よろしくお願いします。 【環境】 MYSQL:ver5 PHP:ver5 他に特にありません テーブル (1)会員基本情報 :staff  ※必ず存在する (2)会員関連情報1:staff_op1  ※ないときもある 画面選択項目で会員ごとに選択件数が違うため別テーブルにしている。  例:好きな○○のジャンルなど複数選択みたいな... (3)会員関連情報2:staff_op2  ※ないときもある  例:好きな○○のジャンルなど複数選択みたいな... //会員基本情報登録 $sql = "INSERT INTO staff ('staff_cd') VALUES ('12345')"; $result=mysql_query($sql); if($result){ //会員基本情報登録がOKのとき //会員関連情報1を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op1 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ //会員関連情報1登録がOKのとき //会員関連情報2を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op2 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ } else{ $error[] = "insert staff_op2 table err" } } else{ $error[] = "insert staff_op1 table err" } } else{ $error[] = "insert staff table err" } if(!$error){ $error[] = "会員情報登録完了!" }

みんなの回答

noname#93451
noname#93451
回答No.2

1つのイベントで更新を複数テーブルで行うためにトランザクション制御するのは良くありません。 色んな事情を考慮した気持ちはわかりますが、バラバラにした会員情報は1つのテーブルに纏めるべきだったと思います。 なるべく早い時期にご検討しては如何でしょうか?

回答No.1

http://dev.mysql.com/doc/refman/4.1/ja/commit.html トランザクションを利用すると出来ます。 最初のqueryを叩く前に、 mysql_query('START TRANSACTION'); と叩いて、 記述されているスクリプトのエラーの場合の処理の分岐、($errorに値を格納している場所)全てに、 mysql_query('ROLLBACK'); 最後の、「会員情報登録完了!」のところで、 mysql_query('COMMIT'); としてやればよいと思います。ただし、DBの種類を「InnoDB」にしないとトランザクションが出来ません。(デフォルトのMyISAMでは出来ない)

_pecochan_
質問者

お礼

お世話になります。 DBの種類を「InnoDB」に変更すると トランザクションを利用できるんですね! 知らなかったです。 ありがとうございました。

関連するQ&A