みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHPのforeachでMysqlにINSERT

PHPのforeach文を使いMysqlにデータをINSERTしたいです。

配列$resultは以下のような連想配列になっています。
Array
(
[0] => Array
(
[A] => 1
[B] => 2
[C] => 3
[D] => 4
[E] => 5
)
[1] => Array
(
[A] => 2
[B] => 4
[C] => 6
[D] => 8
[E] => 10
)
)

上記の連想配列をforeach()文で以下の処理をします。

foreach ($result as $key => $value) {
/**
* データベースへの追加(新規追加時だけ実行。コメント忘れずに)
*/
$sql = $pdo->prepare('INSERT INTO sample(a, b, c, d, e) VALUES(:a, :b, :c, :d, :e)');
$sql->execute(array(':a' => $value[A], ':b' => $value[B], ':c' => $value[C], ':d' => $value[D], ':e' => $value[E]));
}

その後データベースでselect * from test;とすると1行目のデータしか格納されていません。原因が不明です。
print すると期待する配列要素が表示されますので配列のデータ配置不備ではありません。

アドバイス頂きたくお願い申し上げます。

投稿日時 - 2015-10-06 22:48:41

QNo.9059840

すぐに回答ほしいです

質問者が選んだベストアンサー

むしろ、1行目が挿入されているという事の方が不可解な気が…

ちゃんと見てないけど、こういうことかな。
$sql->execute(array('a' => $value[A], 'b' => $value[B], 'c' => $value[C], 'd' => $value[D], 'e' => $value[E]));

あるいは『INSERT INTO sample』なのに『select * from test;』としているのがおかしいのか、それともこれは単に書き間違えなのか?

なんでループ内でprepareしてるんだろうとか、なんで無意味に$keyを取得してるんだろうとか、$value[A]とかはちゃんと$value['A']と括った方がいいよねとか、DBに主キーはちゃんと設定しているのだろうかとか、エラーやワーニングは出ていないんだろうかとか、色々とあるけれど、まあそこはいいとして…

aとかAとか見てらんねーよ!!
テストやサンプルにしても、もうちょっとなんかあるだろう!!
見てらんねーもん作っても、あんま勉強になんかなんねーよ!!

という事は、強く言っておこう。

単なる書き間違えかもしんないが、sampleやtestなんて現実的な意味をなさない名前だから、間違っていても気付かない。
aとかAも同様、だから碌に勉強にならない。
プログラムなんて、頭の中で意味をこねくり回すものだからだ。
という事。

投稿日時 - 2015-10-07 00:05:04

補足

ご回答頂きありがとうございます。

>DBに主キー
申し訳ございません。オートインクリメントし忘れているだけでした。

ただ、execute()はマニュアルの書き方を習っているので間違いはありませんでした。またよくよく見てみると、Prepare the query onceと書いてあったのでforeachの外に出しました。

その他ご指摘頂いた件は書き間違いなだけです。もろもろ失礼致しました。

>aとかAとか見てらんねーよ!!
>テストやサンプルにしても、もうちょっとなんかあるだろう!!
>見てらんねーもん作っても、あんま勉強になんかなんねーよ!!
閲覧者様が読みやすいように簡単に書いたつもりが間違っていてはまるで意味がないことは反省しておりますが、それだけで勉強している訳ではありませんのでご理解頂きたく。

書き方の問題だけであって動きは同じでしょう。

ただ、解決に繋がりましたのでその点はもろもろご指摘頂けたことに感謝申し上げます。
誠にありがとうございました。

投稿日時 - 2015-10-07 00:35:30

お礼

すみません。$keyも残骸です。ありがとうございました。

投稿日時 - 2015-10-07 00:38:22

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問