エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

try catchする時は、Exceptionをcatchしているか確認する【226日目】

こんなプログラム書きました

try {
    someFunction();
} catch (PDOException e) {
    rollback();
}

これは、PDOexceptionの時だけrollbackするコードです。

何が問題か

これは、PDO関連のエラーの時に、ロールバックの対応をする。
ということです。

つまり、PDO以外のエラーがあった時には何もしないです。

それでも良いコードであれば良いですが、ユーザーの入力が間違っていても、サーバでエラーが出ても、PDOExceptionにならなければrollbackしないことになります。

PDOException以外のエラーではrollbackしないです。

どうするべきだったか

try {
    someFunction();
} catch (Exception e) {
    rollback();
}

問題があったら、rollbackする。

エラーがあってもrollbackしないのであれば、DBのアクセス途中で問題があっても一部のデータが書き込みされてしまう。

データA、データB、データCの3つがそろって初めて意味があるデータのときに、
データBで問題が発生すると、中途半端なデータAが残ってしまう。

これではサイトにいろんな問題が残っていまいます。

これで考えることは

PDOExceptionだけでcatchしようと考えた時は、それ以外のエラーの時どうしたいんだっけ?っていうのを考えてみる。

そもそもユーザーにさせたい動きが間違っていないか考える