アドバイスなど,コメント頂けると嬉しいです。
食堂の予約システムの開発中,食堂側の管理画面を作っていたときのお話です。
バグの詳細
商品の状態を更新する処理を作っていたところ,追加処理は上手くいくのに,状態の更新が反映されなくなりました。
試行錯誤の内訳
① SQLを疑う
var_dump($sql);
var_dump($param);
問題なく,正常に表示されました。
② データベースを確認する
ステータス = "準備完了"
ちゃんと更新されています。
③ 画面側を調べる
次に,画面の更新タイミングを確認しました。すると,
前回取得したtime
↓
現在のtime
↓
違えば再取得
という仕組みになっていました。画面は更新日時(time)だけを見て,更新を判断しているということです。自分で書いたはずなのに…。
バグの原因と解決
状態だけ更新して,更新時刻を更新していなかったことが今回のバグの原因です。
解決を図るため,サーバ上で 更新時刻 を管理する部分に
ON UPDATE CURRENT_TIMESTAMP()
-- 自動で最終更新時刻を代入する処理
を設定しました。
更新時刻をアプリ側で管理する必要がなくなり,今回のような更新漏れも防ぐことができます。今後は制作時の選択肢として積極的に活用していきます。
最後に
同じ「画面が更新されない」という現象でも原因は,
- SQL
- PHP
- JavaScript
- キャッシュ
- 更新判定
など様々です。
今回はデータそのものではなく、「更新されたことを示す情報」が更新されていなかったことが原因でした。画面が切り替わらなくなってしまった際は,
「画面は何を見て更新を判断しているのか?」
まで確認すると、原因が見つかるかもしれません。
ここまでお読み頂き,ありがとうございました。
