配列のデータを同時にそれぞれ違う行に挿入したい。コードサンプルを教えてくださると大変助かります。 やりたいこと ["agent_tags"]=> {
配列のデータを同時にそれぞれ違う行に挿入したい。コードサンプルを教えてくださると大変助かります。 やりたいこと ["agent_tags"]=> { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "5" } (配列の個数、中身の数字は事前に選択される) これを <agents_tags> id(auto) agent_tag tag_id 1 2 1 2 2 2 3 2 3 4 2 5 などにしたいです。 (agent_tagは直前に挿入されたデータのid(autoincliment)をLAST_INSERT_IDで取得して、挿入する) 書いたコード $stmt = $db->prepare('insert into agents_tags (agent_id, tag_id) VALUES (LAST_INSERT_ID(), :tag_id)'); foreach($form['agent_tags'] as $agent_tag): $stmt->bindValue('tag_id', $agent_tag, PDO::PARAM_STR);//いくつかあるから、配列?for文? endforeach; こちらのコードを実行すると、配列の最後の行だけ、挿入されます。 (※$form['agent_tags']の値は上記です。) $form['agent_tags']はPOSTで以下にフィルタリングしています。
解決したため、成功したコードを掲載 $stmt = $db->query('select id from agents where id = LAST_INSERT_ID()'); $agent_id = $stmt->fetch(PDO::FETCH_ASSOC); $stmt = $db->prepare('insert into agents_tags (agent_id, tag_id) VALUES (:agent_id, :tag_id)'); foreach($form['agent_tags'] as $agent_tag): $stmt->bindValue('agent_id', $agent_id['id'], PDO::PARAM_INT); $stmt->bindValue('tag_id', $agent_tag, PDO::PARAM_INT); $stmt->execute(); endforeach;
ベストアンサー
> こちらのコードを実行すると、配列の最後の行だけ、挿入されます。 prepare()して、bindValue()しただけでは、実行されません。 「これらのコード」ではない所で execute()しているのでしょうけど、バインドの都度 execute()を呼んでないから実行されないのだろうと予想します。
この返信は削除されました