前提・実現したいこと
テーブルの正規化に取り組んでいます。
INSERTやUPDATEなどが失敗した場合の処理について疑問に思い質問させて頂きました。
よろしくおねがい致します。
発生している問題・エラーメッセージ
問題が発生したわけではなく、発生した場合の処理を知りたいです。
エラーメッセージ:なし
該当のソースコード
以下で➀➁までできたけど、➂が失敗した、という問題が発生した場合の処理はどのようにするのでしょうか?
php
1$arr = $_POST["arr"]; // -> ['name'=>'太郎','age'=>20] 2 3// ➀user_listテーブルへ登録 4$name = $arr['name']; 5$age = $arr['age']; 6$sql = " 7INSERT INTO user_list ( name, age ) 8VALUES ( $name, $age ) 9"; 10$res = $dbh->query($sql); 11 12// ➁IDを取得 13$insert_user_id = $dbh->lastInsertId(); 14 15// ➂そのIDを使いuser_metaテーブルへ登録 16$meta_data = rand(1, 100); 17$sql = " 18INSERT INTO user_meta ( user_id, meta_data ) 19VALUES ( $insert_user_id, $meta_data ) 20"; 21$res = $dbh->query($sql); 22 23// ➃IDを取得 24$insert_meta_id = $dbh->lastInsertId();
試したこと
以下のように成功するまで実行しようものなら、へたをすればずっとここで実行し続けることになりますからこれはイケてないと思います。
// ➀user_listテーブルへ登録 // 同上 // ➁IDを取得 // 同上 $insert_meta_id = x($insert_user_id); function x($insert_user_id){ // ➂そのIDを使いuser_metaテーブルへ登録 // 同上 // ➃IDを取得 // 同上 return $insert_meta_id; } // 問題が発生した場合はもう一度実行 if ( $insert_meta_id === 0 ) { x($insert_user_id); }
または以下のようにエラー専用テーブルに保存するようにしても、じゃそこでまた失敗したらどうするのか?ということになるのでこれもどうかと思います。
// ➀user_listテーブルへ登録 // 同上 // ➁IDを取得 // 同上 // ➂そのIDを使いuser_metaテーブルへ登録 // 同上 // ➃IDを取得 // 同上 // 問題が発生した場合 if ( $insert_meta_id === 0 ) { // ➄error_logテーブルへ登録 $sql = " INSERT INTO error_log ( user_id, meta_data ) VALUES ( $insert_user_id, $meta_data ) "; $res = $dbh->query($sql); // ➅IDを取得 $insert_error_id = $dbh->lastInsertId(); }
補足情報(FW/ツールのバージョンなど)
WordPress使用中に感じた疑問ですが、一般的なMySQLの処理としても疑問に思いました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。