こんなプログラム書きました
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しようと考えた時は、それ以外のエラーの時どうしたいんだっけ?っていうのを考えてみる。
そもそもユーザーにさせたい動きが間違っていないか考える