テーブルは以下の構造とし、PDOを使用しています。
PHPは7.0。
テーブル名:users
aId int auto_increment primary key,
bId int,
created datetime,
modified datetime
bIdを検索し、存在したらレコードのmodified更新、無かったらbId, created,をセット後レコード追加。
直後に、更新もしくはインサートされたレコードのaId含む全フィールドを取得したい・・・。
とした場合、更新やインサートと同時にレコードを取得する方法はありますか?
それとも、bIdでもう一度検索かけないとだめですか?
よろしくお願いします。
(1)bIdを検索し、存在したらレコードのmodified更新
bIdで検索するときに select bId from users ~ ではなく select * from users ~で取ってきたら、該当レコードの情報はどこかに保存しておけそう。
(2)無かったらbId, created,をセット後レコード追加
新規に追加するレコードのaId 以外の情報はプログラムで指定するのですよね? aId は 最後に挿入された行のID を取得する命令
http://php.net/manual/ja/pdo.lastinsertid.php
で取れそうです。
はい、こちらの状況でしたら、DBに追加または更新をする前の段階でPHP側で該当レコードの情報は持っているはずなので、その情報を使います(新規に追加したレコードのIDは上記ページの命令で取れるはず)。
2016/01/12 13:40:47>try catch 内に記述すれば万に一つのイレギュラーも発生しませんか?
基本的には前後にtry catch を置いて適切にエラーハンドリングをするようにすれば、何らかのエラーが発生した場合はハンドリングされるはずです。少なくても私の経験上では、try catchを入れているのにDB更新が空振りし、ハンドリングもできなかった、というケースは見たことがないです。1秒に数万レコード更新する、とかのようなシビアな状況は経験したことがないので分かりませんが、基本的にはPHPとMySQLに用意されているエラーハンドリングの仕組みをじゅうぶん信用してよいでしょう。
想定どおり動かないのであれば、自分が書いたプログラムが間違っている可能性のほうが高いです。不安であれば、追加・更新用のSQL文をログに残すとかするとよいかもしれません。
ご親切にありがとうございます。
2016/01/12 13:49:36>不安であれば、追加・更新用のSQL文をログに残すとかするとよいかもしれません。
早速、教えていただいた方法で書いてまいります。
ありがとうございましたm(_ _)m