• ベストアンサー

【初歩】配列の格納データ数だけSQLを実行するようループしたい

$arrayCodeは生徒の出席番号を列挙した配列です。 $arrayNameは生徒の名前を列挙した配列です。 それぞれの配列に9個ずつデータが格納されており、出席番号に対応する名前をupdateしたいです。 $arrayCodeや$arrayNameにforeach構文などで9回SQL発行、実行を繰り返すのでしょうが、 どのように記述したらいいでしょうか。foreachの使い方がいまいち理解できておらず・・・。 よろしくお願い致します。 $arrayCode = array(1,2,3,4,5,6,7,8,9); $arrayName = array("阿藤","伊藤","宇藤","江藤","尾藤","加藤","木藤","工藤","毛藤"); $sql = "update mytable set myName = '$arrayName' where myCode = '$arrayCode' "; $rst = mysql_query($sql, $con); if ($rst) { echo "成功"; } else { echo "失敗"; }

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

  • ベストアンサー
noname#152201
noname#152201
回答No.3

if ( count($arrayCode) == count($arrayName) ) {   for ( $i = 0; $i < count($arrayCode); $i++ ) {     $sql = "update mytable set myName = " . $arrayName[$i] . " where myCode = " . $arrayCode[$i];     $rst = mysql_query($sql, $con);   } } テストしてませんがこんな感じはどうでしょうか?

litton101
質問者

お礼

ryoumasanさん、ありがとうございました。 わたしにも理解できる(?)for構文による解法、 目からうろこでした。 まさに、こういうことできないかと頭を悩ませていました。 大変勉強になりました。ありがとうございました。

その他の回答 (3)

noname#152201
noname#152201
回答No.4

あくまでもforeach文を利用する場合、連想配列にすると良いです。 $data = array( 1=>"阿藤", 2=>"伊藤", 3=>"宇藤", 4=>"江藤", 5=>"尾藤", 6=>"加藤", 7=>"木藤", 8=>"工藤", 9=>"毛藤"); foreach ($data as $key => $value) {   $sql = "update mytable set myName = " . $value . " where myCode = " . $key;   $rst = mysql_query($sql, $con); }

litton101
質問者

お礼

ryoumasanさん。たびたびのご回答ありがとうございました。 #2さんの御礼にも書きましたが、 今回の本番環境の配列には「1=>」などのキーがついているわけでは ないので、残念ながらご回答の方法は適用できませんでした。 でも、大変参考になりました。ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

配列を二つ使うのは整合性がとりにくいのでお勧めできません。 一応2つ例示しておきます。 <? $arrayCode = array(1,2,3,4,5,6,7,8,9); $arrayName = array("阿藤","伊藤","宇藤","江藤","尾藤","加藤","木藤","工藤","毛藤"); foreach($arrayName as $key=>$val){ $sql = "update mytable set myName = '{$val}' where myCode = '{$arrayCode[$key]}' "; //$rst = mysql_query($sql, $con); print $sql."<br>"; } ?> <? $arrayName = array(1=>"阿藤",2=>"伊藤",3=>"宇藤",4=>"江藤",5=>"尾藤",6=>"加藤",7=>"木藤",8=>"工藤",9=>"毛藤"); foreach($arrayName as $key=>$val){ $sql = "update mytable set myName = '{$val}' where myCode = '{$key}' "; //$rst = mysql_query($sql, $con); print $sql."<br>"; } ?>

litton101
質問者

お礼

yambejpさん、いつもお世話になります。 前者は、まさにやりたいコトでした。 $key=>$val という書き方がミソだったのですね。 後者は、配列に「1=>」などのキーがついているわけではないので 今回は適用できないようです。 いずれにせよ、おかげさまで解決しました。ありがとうございました。

  • aleister
  • ベストアンサー率31% (11/35)
回答No.1

下記URLを参照してください

参考URL:
http://ww7.tiki.ne.jp/~inabah/php/002_011.htm
litton101
質問者

お礼

aleisterさん、早速のご回答ありがとうございました。 foreachの書き方は、ご照会のものなど解説サイトでわかるのですが、 二つの配列変数を同時並行でSQL文に流し込んでいく書き方がわかりませんでした。 $arrayCode = array(1,2,3,4,5,6,7,8,9); $arrayName = array("阿藤","伊藤","宇藤","江藤","尾藤","加藤","木藤","工藤","毛藤"); 以上の2配列変数を、 $sql = "update mytable set myName = '阿藤' where myCode = '1' "; $rst = mysql_query($sql, $con); $sql = "update mytable set myName = '伊藤' where myCode = '2' "; $rst = mysql_query($sql, $con); $sql = "update mytable set myName = '宇藤' where myCode = '3' "; $rst = mysql_query($sql, $con);   :  (以下略)   : …という風に順次実行していくのに、例えば次のようにすれば、$arrayCodeの方は SQL文に順次流し込んでいけますが、$arrayNameの方は流し込んでいけませんよね? foreach ($arrayCode as $value) { $sql = "update mytable set myName = '$arrayName' where myCode = '$value' "; $rst = mysql_query($sql, $con); }

関連するQ&A