※ ChatGPTを利用し、要約された質問です(原文:MySQL UPDATE SETが失敗なのに1が返る)
MySQL UPDATE SETが失敗なのに1が返る
このQ&Aのポイント
MySQL5.0 PHP5 PEAR(DB)を使用している場合、UPDATE文の実行結果が失敗の場合でも1が返ってしまう問題が発生しています。
該当データが存在しない場合、通常のUPDATE文では返り値として0が戻るはずですが、MySQL5.0 PHP5 PEAR(DB)では1が返ってしまいます。
このため、判定のためにif($res==0)としても正しく判定できず、困っています。
MySQL UPDATE SETが失敗なのに1が返る
MySQL UPDATE SETが失敗なのに1が返る
いつもお世話になります。
MySQL5.0 PHP5 PEAR(DB)にて開発中です。
"UPDATE master SET xxx={$xxx}+1 WHERE id={$id} AND xxx={$xxx}"
上記クエリを実行し、
WHERE以下に該当しないない場合は、該当データー無しとして別の処理を行う予定です。
該当すればそのままUPDATEでいいのですが、
ここで該当無しとなれば、通常UPDATEの場合は返り値として0が戻るはずなのでが、
どうしても1が戻ってしまいます。
その為、if($res==0) として判定できず困っております。
※もちろん、該当無しのUPDATEの場合は、テーブル内のデーターは変更されていません。
どなたか回答をお寄せ下さい。
宜しくお願いします。
お礼
ようやく解決しました。 UPDATEの返り値をどうこうするってのはダメそうなので、 ※ifで判定はできないので、 if($db->affectedRows==0){ } とすれば上手くいきました。 お手数お掛けしました。
補足
度々恐れ入ります。 $sql = "UPDATE master SET xxx={$xxx}+1 WHERE id={$id} AND xxx={$xxx}"; $res = $db->query($sql); //$dbは、PEARのDBオブジェクトが入ってます。 if($res==0){ //ここにはUPDATEできなかった場合の処理 //rollback() }else{ //アップデートできた場合の処理。 //commit() } ※補足としては、フィールドxxxに通番値を格納していまして、 この値が、UPDATE前(事前にSELECTされた時)の値と、UPDATEする直前の値と比較して、 同時実行制御を狙っています。 それが、WHERE id={$id} AND xxx={$xxx}"; のxxxの比較と考えています。 ※{$xxx}は事前のSELECT時に通番を格納しています。 xxx={$xxx}ならば、UPDATEが成功し、 if($res==0)が未成立となって、つまり更新が行われていると判断して、 commit()しようと考えています。 ですが、そもそも、UPDATEの返り値をifで判定するのがおかしいのかと思いました。 ただ、このUPDATEの成功・不成功を元にする組み方は書籍を参考にしております。 もし、UPDATEの結果をifで判定してはダメなら、別の手段を考えようと思いますが、 なかなか上手い具合に思いつかなくて・・・。 度々の補足申し訳ございません。