質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3395閲覧

updateした際、変更が無かった場合に処理を中止させたい

happy_tera

総合スコア159

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/05/31 08:32

phpのループ処理で1件づつupdateしていくのですが、
変更なかった場合、phpのbreakで処理を中止させたいのですが、
updateした時に変更が無かった場合のレスポンスは取得できるのでしょうか?
宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2017/06/01 01:28 編集

ちょっと具体性にかけるので、サンプルのテーブルを提示して、 どういったupdateを書けたいのか教えてください 仕様についても追記してあります
guest

0

ベストアンサー

update をどうやって行っているかで異なります。

  1. exec() を使っている場合

exec の戻り値が「その実行によって変更・削除された行数」になっているので、これが 0 か否かで処理を振り分けることができます。

  1. query() もしくは PDOStatement::execute() を使っている場合

rowCount() で 1. と同様に行数を得ることができます。
※query()の場合はqueryの戻り値が PDOStatement ですので、これに対してrowCount() を適用して取得します

投稿2017/05/31 08:58

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

happy_tera

2017/05/31 09:05

回答ありがとうございます。 pdoを使っています。 変更があればrowCount()が1以上で変更が無ければ0なのでしょうか?
tacsheaven

2017/05/31 09:22

update や delete によって「影響を受けた行数」が帰ってきますので、0 であれば更新(削除)された行がない、という意味になります。 ※where 条件に合致した行がない、という意味ですので、エラーではありません
happy_tera

2017/05/31 09:33

ありがとうございました。 if(rowCount()==0)break; としたいと思います。
yambejp

2017/05/31 09:39 編集

for文の中でそんな処理をすると、それまでの更新はそのままに 更新しない行がでてきたらそれ以降のデータは放置という 中途半端なことになりませんか?
tacsheaven

2017/05/31 09:54

ですね。トランザクションかけていて rollback するならいいんですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問