電子書籍の厳選無料作品が豊富!

お世話になります。
現在、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のアップデート処理には失敗してしまった。」

というような問題は起きることがあるのでしょうか?
起きることがある場合、それに備えてどのような記述をすれば対応できるでしょうか?

ご存知の方、ご回答いただければ幸いです。
よろしくお願い致します。

A 回答 (1件)

以下のリンクに全てまとめてあります。



Qiita - PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

【失敗したときにどうなるか】
PDO::ERRMODE_EXCEPTIONが有効 → PDOExceptionがスローされる
PDO::ERRMODE_EXCEPTIONが無効 → executeの返り値がFALSEになる

返り値を毎回チェックするのは億劫なので、connectDb()の中でこのオプションを有効にしておくことを推奨します。

また、片方だけ失敗したら困る場合には「トランザクション処理」を行います。PDOExceptionをスローするように設定してある場合、Try~Catchを2重に設けて、内側でロールバックを実行する必要があります。(このあたりも記事に全部書いてるので読んでください。)
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。

参考リンク、ありがとうございます。
「トランザクション処理」、私の考えていた不安はまさにこれでした。

これで解決できそうです。
この度は有益なご回答ありがとうございました。

お礼日時:2014/07/06 02:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!