お世話になります。お恥ずかしながらこれまでトランザクションというものを知らず、一度の処理でテーブルをUPDETEなりDELETEなりを行ったときの整合性に関して調べていた時、このトランザクションというものを知りました。
このトランザクションですが、実際に動きを確認したいと考え、以下のようにinsertなりupdateなり、3つのテーブルの処理を行い、失敗したときの動きを確認したいと考えていますが、tryの中で失敗するものがあっても個別にsqlが実行してしま状況です。
恐れ入りますが、アドバイスいただくことは可能でしょうか?
よろしくお願いいたします。
//各テーブルの型はInnoDB型です。 $mysqli->begin_transaction(); try { $query = "INSERT INTO a_transaction_slip(slip_no, slip_date, slip_member_no, slip_price) VALUES (0, '$date', '$member_no', '$slip_price')"; $res = $mysqli->query($query); $increment_no = mysqli_insert_id($mysqli); //sales_noカラムはauto_increment。あえて1をインサートして動きを見ている。 $query = "INSERT INTO a_transaction_sales(sales_no, sales_slip_no, sales_item_no) VALUES (1, '$increment_no', '$item_no')"; $res = $mysqli->query($query); //item_noカラムのデータ型はint型。あえて日付が入っている$date変数を条件にして動きを見ている。 $query = "UPDATE a_transaction_item SET item_stock = item_stock - 1 WHERE item_no = '$date'"; $res = $mysqli->query($query); } catch( Exception $e ){ // エラーが起きたらロールバック $mysqli->rollback(); } // 正常に終了したらコミット $mysqli->commit();
回答2件
あなたの回答
tips
プレビュー