php&MySQLについての質問です。


テーブル「item」に10個のフィールドがあるとします。
id,item_name,price,......

現在は下記のようにフィールドの値を1つずつ取得して変数へ入れています。
変数名=フィールド名といった感じで一括で取得して変数に入れる方法はありませんか?

$query = mysql_query("SELECT item_name FROM item WHERE id='$id", $link);
if($row = mysql_fetch_array($query)){
$item_name =($row['item_name']);
}

回答の条件
  • URL必須
  • 1人10回まで
  • 13歳以上
  • 登録:2010/07/12 22:47:49
  • 終了:2010/07/13 08:11:20

ベストアンサー

id:rouge_2008 No.1

rouge_2008回答回数593ベストアンサー獲得回数3502010/07/13 00:35:53

ポイント100pt

先にカラムを取得して置いて、可変変数を使用して代入しています。

$res = mysql_query("DESC item", $link);

while ($row = mysql_fetch_row($res)) {
	$clm_arr[] = $row['0'];
}

$cnt = count($clm_arr);

// $idはこれより前に指定してあるものとします。
$query = mysql_query("SELECT * FROM item WHERE id='".$id."'", $link);

while ($row = mysql_fetch_array($query, MYSQL_ASSOC)){
	for($n = 0; $n < $cnt; $n++){
		$$clm_arr[$n] = $row["$clm_arr[$n]"];
		// 表示確認
		echo "変数 $$clm_arr[$n] の値は ${$clm_arr[$n]}です。<br>\r\n";
	}
}


・カラムの取得

http://yantona.jugem.jp/?eid=301

http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html#doc1_ss:info...


・可変変数

http://www.dotaster.com/doc/php3/tips/varvars.php

http://masha.maakikaku.jp/2008/03/php.php

id:clab_yasu

お世話になります。

ズバリのご回答ありがとうございました。

今まで長々と記述していたのが何だったろうと感じる便利さですね。

2010/07/13 08:08:52

その他の回答(1件)

id:rouge_2008 No.1

rouge_2008回答回数593ベストアンサー獲得回数3502010/07/13 00:35:53ここでベストアンサー

ポイント100pt

先にカラムを取得して置いて、可変変数を使用して代入しています。

$res = mysql_query("DESC item", $link);

while ($row = mysql_fetch_row($res)) {
	$clm_arr[] = $row['0'];
}

$cnt = count($clm_arr);

// $idはこれより前に指定してあるものとします。
$query = mysql_query("SELECT * FROM item WHERE id='".$id."'", $link);

while ($row = mysql_fetch_array($query, MYSQL_ASSOC)){
	for($n = 0; $n < $cnt; $n++){
		$$clm_arr[$n] = $row["$clm_arr[$n]"];
		// 表示確認
		echo "変数 $$clm_arr[$n] の値は ${$clm_arr[$n]}です。<br>\r\n";
	}
}


・カラムの取得

http://yantona.jugem.jp/?eid=301

http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html#doc1_ss:info...


・可変変数

http://www.dotaster.com/doc/php3/tips/varvars.php

http://masha.maakikaku.jp/2008/03/php.php

id:clab_yasu

お世話になります。

ズバリのご回答ありがとうございました。

今まで長々と記述していたのが何だったろうと感じる便利さですね。

2010/07/13 08:08:52
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492010/07/13 02:48:51

ポイント35pt

手抜き対応

mysql_queryの結果が意図しない順序や内容であっても動いてしまうためミスに気づけない

トラブル発生の原因になり、トラブル発生箇所の発見も困難にする手抜きな対応

$query = mysql_query("SELECT item_name, price, ...... FROM item WHERE id='$id", $link);
if($row = mysql_fetch_array($query)){
    list( $item_name, $price, ...... ) = array_values( $row );
}

堅実な対応

mysql_queryの結果が意図しない内容の場合はエラーになって止まる可能性が高くミスに気づきやすい

コード作成は少し面倒でもトラブルを起こすことは少ない

コードの意図することも理解しやすくなりメンテナンスも容易

$query = mysql_query("SELECT item_name, price, ...... FROM item WHERE id='$id", $link);
if($row = mysql_fetch_array($query)){
    list( $item_name, $price, ...... ) = array( $row['item_name'], $row['price'], ...... );
}

その他

1レコード取得
if (list( $item_name, $price, ...... ) = mysql_fetch_array($query)) {
複数レコード取得
while (list( $item_name, $price, ...... ) = mysql_fetch_array($query)) {

参考URL

http://jp2.php.net/manual/ja/function.list.php

http://jp2.php.net/manual/ja/function.array-values.php

  • id:tobeoscontinue
    連想配列からローカル(現在のシンボルテーブルに)変数を生成するものにextractがあります。
    $_GETや$_POSTに対してextractを使うことはセキュリティ的に危険ですが
    function内で使うとかEXTR_SKIPやEXTR_PREFIX_ALLなどの$extract_typeを使う
    ことで回避することは可能だと思います。

    $row = mysql_fetch_array($query, MYSQL_ASSOC);
    extract($row);
  • id:clab_yasu
    tobeoscontinue 様
    貴重な追加情報ありがとうございました。
    データベースはほとんど勉強できていないのですが、
    色々と便利なコマンドがあるのですね。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません