![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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の場合は、テーブル内のデーターは変更されていません。
どなたか回答をお寄せ下さい。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
>if($res==0)として判定にひっかっかってくれないのかが不明
っていうか、$resについて質問のなかでなにか定義されてないんですが・・・
たぶん、単に成功時にリソースの戻り値を返しているのであって
updateされたかどうかなんて見ていないんじゃないですかね?
失敗したのではなく0件のアップデートが成功したという考え方です
逆に$res==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で判定してはダメなら、別の手段を考えようと思いますが、
なかなか上手い具合に思いつかなくて・・・。
度々の補足申し訳ございません。
ようやく解決しました。
UPDATEの返り値をどうこうするってのはダメそうなので、
※ifで判定はできないので、
if($db->affectedRows==0){
}
とすれば上手くいきました。
お手数お掛けしました。
No.1
- 回答日時:
この回答への補足
回答ありがとうございます。
早速mysql_affected_rows()を使って、
直近のUPDATEを調査しました。
すると、質問にあります、WHERE以下に該当しない場合のUPDATEは、
きちんと該当なしして0を返してくれました。
やはり、UPDATEは正確に作動しているようです。
となると、
なぜ、print_r()にて、UPDATEクエリの結果を出力したら1が返るのかと、
if($res==0)として判定にひっかっかってくれないのかが不明となります。
※$resはUPDATEのクエリ結果がはいります。
※$resにはUPDATEに該当しない場合(0を期待する場合)の判定です。
ん~~
他に思い当たることはございませんでしょうか?
お手数おかけします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- MySQL UPDATE my_items SET item_name '赤い,甘い,ケーキ' WHERE id 1 2023/01/03 09:52
- その他(パソコン・周辺機器) チャレンジタッチ3 改造 アプリインストールできない 1 2022/07/01 14:43
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- WordPress(ワードプレス) WordpressのWebサイト 編集の仕方 1 2022/06/16 12:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マイクラPC版のコマンドで効率...
-
副問合せの書き方について
-
SQLについての質問
-
貝を買って中から死にかけのカ...
-
インスタの名前でかっこいいと...
-
MYSQL PERL からの抽出について
-
一つ前のレコードの値と減算し...
-
クエリ表示と、ADOで抽出したレ...
-
SQL文で、一部一致した列だけ抽出
-
主キーレコードを削除する場合
-
別テーブルからSELECTした値を...
-
複数JOINしているとCOUNTが正し...
-
1テーブル&複数レコードの更新...
-
mysqlで2つのテーブルを使った...
-
HAVING count()で重複したデー...
-
ダイソンのサイクロン掃除機「...
-
別のDB(Table)からの複数行の...
-
MySQL UPDATE SETが失敗なのに...
-
上位3位を求めるSQL文は?
-
ウイルスバスター2005への...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
ある条件の最大値+1を初番する...
-
Unionした最後にGROUP BYを追加...
-
inner joinをすると数がおかし...
-
期間の重複を調べるSQL文につい...
-
クエリ表示と、ADOで抽出したレ...
-
Access パラメータクエリをcsv...
-
PL/SQLの変数について
-
MySQLのDATE型カラム値がNULLの...
-
php+mysqlで複数選択削除について
-
上位3位を求めるSQL文は?
おすすめ情報