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

解決済みの質問

PHPにてSQLから取得したデータを使いまわしたい

データ(テーブル名:os)
id,name_a,name_b
1,マイクロ,ソフト
2,マッキン,トッシュ
3,リ,ナックス

というテーブルがあり
<?php
$sql = mysql_query("SELECT * FROM os WHERE name_b LIKE 'ソフト'");
while($ck = mysql_fetch_assoc($sql)){
}
?>

とした場合
whileの中では、echo $ck[name_a]; とすればこの場合「マイクロ」と表示されますが
whileの外でも表示させたい場合はどうすれば効率がいいでしょうか?

一つは、whileの中で$a = $ck[name_a]; $b = $ck[name_b]・・・と入力すればいいのですが
フィールド数が結構な数ある為に効率が悪いです。

また、
list($ck2[],$ck2[],…) = $assoc;
というようにlistを使ってもつらつらと書かなければなりません。

もしくは、mysql_fetch_assocをrowに書き換えて
for($i=0;$i<count($ck);$i++){
$ck2[$i] = $ck[$i];
}
としてしまうか、
現在htmlで作業しているのですが
<?php
while(){
?>
<?php echo $ck[name_a]; ?>
<?php
}
?>
がいいかな。と思ったりするのですが
なにぶん素人の考えなので、実際に仕事等で利用されている方は
どのようにして使用しておられるのか教えて頂けると幸いです。

宜しくお願いします。

投稿日時 - 2011-02-02 17:21:07

QNo.6492891

困ってます

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

こうやって配列にため込んで再利用してみては?

<?PHP
$sql="SELECT * FROM os WHERE name_b LIKE 'ソフト'";
$res=mysql_query($sql);
while($row = mysql_fetch_array($res,MYSQL_ASSOC)){
$a[]=$row;
}
print_r($a);
?>

SQLの戻り値データが一つしかなく、フィールド名(もしくは任意の別名)の
配列におさめればいいのであれば

<?PHP
$sql="SELECT * FROM os WHERE name_b LIKE 'ソフト'";
$res=mysql_query($sql);
while($row = mysql_fetch_array($res,MYSQL_ASSOC)){
extract($row);
}
print $name_a;
?>

でもよいですが、extractは致命的なバグにつながる可能性も秘めているので
お勧めはできません。
またSELECT * は避けた方がいいです。可能な限りフィールド名を列記してください。

SELECT id,name_a,name_b FROM ・・・

投稿日時 - 2011-02-02 18:11:54

お礼

回答、有難う御座います。

お陰様で自分が求めていた処理を施せるようになりました。

配列を二次元化するなんて考えもしませんでした。
勉強になります。

extractはとても便利な関数なんですね。
GETやPOST等の信頼出来ないデータは使用しない方がいい旨が
少し調べた所記載されていたので
多次元配列とextractを使いわけながら使用していきたいと思います。

後、「*」も了解しました。
フィールド長がかなりあったので手抜きしていたのですが、
これからは列記していくことにします。

解りやすい回答、有難う御座いました。

投稿日時 - 2011-02-03 10:59:47

ANo.1

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

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

回答(1)

あなたにオススメの質問