phpのループ処理で1件づつupdateしていくのですが、
変更なかった場合、phpのbreakで処理を中止させたいのですが、
updateした時に変更が無かった場合のレスポンスは取得できるのでしょうか?
宜しくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
変更がなければ同じデータのままなのであえて
例外処理はいらないのでは?
それとも複数件UPDATE中に1件でも更新できないデータがあれば
全部取り消したいのでしょうか?
確認
具体的に以下の場合はどうするか指示ください
仮にサンプルのテーブルが用意されているとして
SQL
1CREATE TABLE tbl(id INT NOT NULL PRIMARY KEY,val INT); 2INSERT INTO tbl VALUES(1,1),(2,2),(3,3);
(1)存在しないidを指定された時
UPDATE tbl SET val=5 WHERE id=5;
命題のとおりだとupdateされないので中止要件に入ります
(2)同じデータが2度出てくる時-パターン1
UPDATE tbl SET val=10 WHERE id=1;
としたあと、再度
UPDATE tbl SET val=10 WHERE id=1;
が実行された場合、2度めのupdateはされないので中止?
(3)同じデータが2度出てくる時-パターン2
UPDATE tbl SET val=20 WHERE id=2;
としたあと、元のデータである
UPDATE tbl SET val=2 WHERE id=2;
に戻すような処理がされた場合、本来なら中止されないが
題意からするともともとid=2はval=2だったわけで、理論的には
同じデータで更新がかかっている
また、そもそもユニークなidを使ってデータ更新している前提で話していますが
実際にはユニークなキーを元に更新するとは一言も指定されていないため
提示された仕様では回答のしようがありません
投稿2017/05/31 08:36
編集2017/06/01 01:28総合スコア114839
0
ベストアンサー
update をどうやって行っているかで異なります。
- exec() を使っている場合
exec の戻り値が「その実行によって変更・削除された行数」になっているので、これが 0 か否かで処理を振り分けることができます。
- query() もしくは PDOStatement::execute() を使っている場合
rowCount() で 1. と同様に行数を得ることができます。
※query()の場合はqueryの戻り値が PDOStatement ですので、これに対してrowCount() を適用して取得します
投稿2017/05/31 08:58
総合スコア13703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/31 09:22
2017/05/31 09:33
2017/05/31 09:39 編集
2017/05/31 09:54
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/01 01:28 編集