質問: mysql データベース処理が途中で失敗したら? お世話になります。 現在、mysqlのデータベースを使ったphpプログラムを書いているのですが、 以下のように、続けて2つのデータベース処理を記述している部分があります。 $db=connectdb(); //処理1 $st1=$db->prepare("update table1 set title=:title where id=:id1 limit 1"); $st1->execute(array(":title"=>$title,":id"=>$id)); //処理2 $st2=$db->prepare("update table2 set image=:image where id=:id2 limit 1"); $st2->execute(array(":image"=>$image,":id"=>$id2)); db=null; ここで質問があります。 このような記述ですとなんらかの理由により、例えば、 「処理1のアップデート処理は成功したが、 次の処理2のアップデート処理には失敗してしまった。」 というような問題は起きることがあるのでしょうか? 起きることがある場合、それに備えてどのような記述をすれば対応できるでしょうか? ご存知の方、ご回答いただければ幸いです。 よろしくお願い致します。
回答: 以下のリンクに全てまとめてあります。 qiita - phpでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 【失敗したときにどうなるか】 pdo::errmode_exceptionが有効 → pdoexceptionがスローされる pdo::errmode_exceptionが無効 → executeの返り値がfalseになる 返り値を毎回チェックするのは億劫なので、connectdb()の中でこのオプションを有効にしておくことを推奨します。 また、片方だけ失敗したら困る場合には「トランザクション処理」を行います。pdoexceptionをスローするように設定してある場合、try~catchを2重に設けて、内側でロールバックを実行する必要があります。(このあたりも記事に全部書いてるので読んでください。)