SQL+PHPでデータベースからデータを取得する方法について

このQ&Aのポイント
  • SQL+PHPでデータベースからデータを引っ張る方法について困っています。セレクト文を使用してテーブルのデータを取得し、while文で繰り返し処理したいのですが、記述方法がわかりません。
  • テーブルにはa1からa80までのフィールドがあり、それぞれにレコードがあります。単純に$row['axx']と書くのではなく、短いコードで記述したいです。
  • forやforeach、配列を使用して試しましたがうまくいきません。誰か教えていただけると助かります。
回答を見る
  • ベストアンサー

SQL+PHP,セレクト文、シンプルwhile文法

SQL+PHPでサイト制作をしております データベースからセレクト文でデータを引っ張りたいのですが、当方、プログラム初心者のため稚拙な記述方法しか浮かばず困っております。どなたかお力をお貸し願えたらと存じます。 【内容】 テーブルにa1~a80までのフィールドがあり、それぞれにレコードがあります。 【例】 $sql = "SELECT * FROM テーブル名 WHERE フィールド名 LIKE '$xxx'"; $dyn = mysql_query($sql); while($row = mysql_fetch_array($dyn)){ ////この部分の記述方法 } mysql_close($cn); 単純に $a0 = $row['a0']; $a1 = $row['a1']; $a2 = $row['a2']; $a3 = $row['a3']; $a4 = $row['a4']; $a5 = $row['a5']; $a6 = $row['a6']; $a7 = $row['a7']; ・ ・ ・ として、セレクト文からwhileにて必要に合わせPHPを書いているのですが繰り返し受け取るプログラムがシンプルな記述ができません。 できましたら、フィールド数が多いので長くなりがちな記述を短くしたいと考ええています。 forやfordach、またはarrayを使ってはみたのですが、$row['axx']の部分がネックとなりうまく記述することが出来ません。 困っております。お力添え、宜しくお願い申し上げます。

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • thezen5
  • ベストアンサー率84% (27/32)
回答No.3

先ほどの説明ですが while($row = mysql_fetch_array($dyn)){ でなく while($row = mysql_fetch_assoc($dyn)){ でした mysql_fetch_array = 通常の配列で取得 mysql_fetch_assoc = 連想配列で取得

makino03
質問者

お礼

ご回答、ありがとうございます。 結果、お教えいただいたシンプルな記述をアレンジして思うような結果に辿り着きました。 具体的なコードまで頂きまして、重ねてお礼申し上げます。

その他の回答 (2)

  • thezen5
  • ベストアンサー率84% (27/32)
回答No.2

1レコードに80のフィールドがあるんですか? だったら連想配列のまま使用したほうがいいと思いますが。 $a0 = $row['a0']; とかしてたら間違えて上書きとかして面倒なことになりそうですが。 最終出力時に1行づつ分解して出力するべきだと思います。 while($row = mysql_fetch_array($dyn)){ $hairetsu[]=$row; } 最後に foreach($hairetsu as $r){ foreach($r as $k=>$v){echo $k..' の値は '.$v."<br />\n"; } echo "<br />\n"; }

makino03
質問者

お礼

ありがとうございました、大変参考になりました。

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

基本的にまっとうなプログラマなら「SELECT *」はつかいません あくまでデバッグ的な位置づけだとおもっておいてください また、mysql_query()はすでに非推奨です。運用方法を再検討された方がいいかと 以上を踏まえたうえでどうしてもというなら以下のどちらかで (1)extract <?PHP $row1=array("a1"=>"x1","b1"=>"y1","c1"=>"z1"); extract($row1); print $a1."<br>"; print $b1."<br>"; print $c1."<br>"; ?> (2)foreach <?PHP $row2=array("a2"=>"x2","b2"=>"y2","c2=>"z2"); foreach($row2 as $key=>$val){ $$key=$val; } print $a2."<br>"; print $b2."<br>"; print $c2."<br>"; } ?>

makino03
質問者

お礼

ご回答、ありがとうございます。 具体的なコードまで頂きまして、重ねてお礼申し上げます。 十分な知識もないまま運営、恥ずかしく感じています。 非推奨のものを使うリスクを考えますと、おっしゃる通り運用方法を再検討するべきだと感じております。 ありがとうございました。

関連するQ&A

  • while文の中にwhile文を書きたいのですが。。。

    while文の中にwhile文を書きたいのですが。。。 現在、下記ソースでプログラムを記述しております。 下記ソースですと、1回目のループのデータは抽出できるのですが、2回目のループだとデータが抽出できません。。 <? while($item0_3 = mysql_fetch_array($res0_3)){ ?> <tr> <td class="A"> <select name="work_partner_com[]"> <? while ($item5_2 = mysql_fetch_array($res5_2)) {?> <option value="<?=$item5_2["com_name"]?>"><?=$item5_2["com_name"]?></option> <? }?> </select> </td> <td class="B"> <select name="work_com[]"> <? while ($item5_3 = mysql_fetch_array($res5_3)) {?> <option value="<?=$item5_3["name"]?>"><?=$item5_3["name"]?></option> <? }?> </select> </td> </tr> <? } ?> 1回目のwhile文で、データーベースの指定したテーブルに格納されている数 2回目のwhile文で、データーベースの指定したテーブルに格納されているマスタデータ数 ご教授いただけますでしょうか。

    • ベストアンサー
    • PHP
  • PHPとMYSQLを用いてSELECT文とTEXTBOXの関連付け

    今、PHPとMYSQLを用いてシステムの構築を行っています。 そこで一つ質問があります。 まず具体的に説明します。 A、B、C、D、E、F、G、H、I、Jという10人の学生がいます。 そこでSELECT文にこの10名を表示させ、順にA、F、Jと選択します。そしてA、F、Jの3人の学生をTEXTBOXに表示させたいと思ってます。 画面イメージは左にSELECT文で右にTEXTBOXです。 以下ソースコードです。 ------------------------------------------------------ <SELECT> <?php $sql2="select * from gakusei"; $rst2 = mysql_query($sql2, $con); while($row2=mysql_fetch_array($rst2)){ echo '<option>'.$row2['gname'].'</option>'; } ?> </select> 学生 <input type=text name=gakusei> ---------------------------------------- このgakuseiテーブルから値を取り出しSELECT文に表示させます。 そして選択した学生をTEXTBOXに表示させたいのです。 例えばAと選択すればTEXTBOXにAと表示され、続いてFと選択すればTEXTBOXにFと表示され、Jと選択すればTEXTBOXにFと表示され、最終的にTEXTBOXにはAFJと表示されるようにしたいのです。 アドバイスお願いします。

    • ベストアンサー
    • PHP
  • SELECT文をinclude(SQLとPHP)

    SQLのデータを呼び出すときに <?php function connect() { return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM table-name"); $word = $st->fetchAll(); ?> としています。 ここで、テーブル名(ここでは「table-name」)を外部のphpからincludeすることは可能でしょうか? 試したのは、 table-name という内容のphpを 「table.php」というファイル名で同じディレクトリ内に保存。 <?php function connect() { return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM {<?php include('table.php'); ?>}"); $word = $st->fetchAll(); ?> としたのですが、反応しませんでした。 そもそもこのようなことが可能かどうかもわかりません。 良い方法がありましたら、ご指導ください。

    • ベストアンサー
    • PHP
  • SELECT文をinclude(SQLとPHP)2

    SQLのデータを呼び出すときに <?php function connect() { return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM table-name"); $word = $st->fetchAll(); ?> としています。 ここで、テーブル名(ここでは「table-name」)を外部のphpからincludeすることは可能でしょうか? 試したのは、 table-name という内容のphpを 「table.php」というファイル名で同じディレクトリ内に保存。 <?php function connect() { return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM {<?php include('table.php'); ?>}"); $word = $st->fetchAll(); ?> としたのですが、反応しませんでした。 そもそもこのようなことが可能かどうかもわかりません。 良い方法がありましたら、ご指導ください。

    • ベストアンサー
    • PHP
  • select文

    こんばんは。PHPでデータベースからレコードとフィールドを表として取り出そうとしてますが、うまく行きません。 MySQLへの接続はうまくいってると思うので、while文が間違ってるのでしょうか?PHPのバージョンはPHP Version 4.4.2です。 よろしくお願いしますm(__)m <?php require_once("dbini.php"); $con = mysql_connect($server, $user, $pass); $select = mysql_select_db($dbname, $con); $sql = "select * from book"; $rst = mysql_query($sql, $con); $body = "<table border='0' cellpadding='5' cellspacing='5' width='500'><tr><td>\n"; while($col = mysql_fetch_array($rst)) { $body .= "<b><font size='+2'>".$col["title"]."</font></b>" $body .= "</td></tr>"; $body .= "<tr><td colspan='2'>".$col["article"]."</td></tr></table>"; } mysql_free_result($rst); $con = mysql_close($con); ?> <html> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • php上でSQL文を実行した結果と、phpMyAdminで実行した結果が違う

    ☆実行環境 php5.3 MySQL4.0 $sql="SELECT * FROM テーブル名 WHERE フィールド名 like '".$変数."%'" php上で上記のようなSQL文を実行させようとしています。 テーブルには該当する行がいくつかあるのですが、ページ上では1行も表示してくれません。 mysql_num_rowsの返り値を見ると0になっています。 SQL文の組み立てがおかしいのかと思い、phpMyAdmin上でSQL文を実行すると、 きちんと欲しい内容が表示されます。 とするとphpでのSQL文の書き方がおかしいのだと思います。 どこかおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • phpのmysql_fetch_arrayに該当する関数はありますか?

    以下のようなphp、MySQLのセレクト文は perlだとどのようになるのでしょうか? $sql="SELECT abc,xyz FROM table "; $res=mysql_query($sql,$con) or die("データベースを検索できませんでした。 mysql_error(); "); $i=0; while($row=mysql_fetch_array($res)) { $abc[$i]=$row['abc']; $xyz[$i]=$row['xyz']; $i++; }

    • ベストアンサー
    • Perl
  • 下記のSQL文の結果をPHPページに表示したい

    質問、失礼いたします。 下記のSQL文の結果を、結果が0の場合を除き、 PHPページで表示させたいのですが、PHPテーブルの作り方がわからりません。 【$sql】 SELECT char_length(`address`)-char_length(replace(`address`,'東京','')) FROM table1 ORDER BY CHAR_LENGTH( `address` ) - CHAR_LENGTH( REPLACE( `address` , '東京', '' ) ) DESC LIMIT 0,10 $result = executeQuery($sql); $res = mysql_fetch_assoc($result); while($row = mysql_fetch_array($res)){ $table = "<table><tr><td>".row[char_length(`address`)-char_length(replace(`address`,'東京',''))]."</td></tr></table>"; } echo $table; 自分なりに上記の方法を試したのですが、違ったようで解決策がどうもみつかりません。 ご存じの方いらっしゃいましたら、なにとぞご教授お願い致します。

    • ベストアンサー
    • PHP
  • SELECT文で取り出したデータを文字列を別のtableのひとつのフィールドへ

    宜しくお願いいたします。 PHP5 Mysql5 で運用しています。 $sql = "SELECT * FROM member WHERE ****** $rst = mysql_query($sql, $con); で取り出して while($col = mysql_fetch_array($rst)) { print $col['mail']; } これで表示はさせられるのですが、 この出てきたデータを [ , ] で区切って全部一まとめにして。 次の画面で、別のテーブルの一つのフィールドに 全部入れたいのですが判りません。。 表示はさせられるのだから、それを一まとめにしては 出来るつもりでしたが。どうしても判りません。 どのようにしたらよろしいでしょうか? アドバイスなど、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • WHILEで取り出しループ中にさらにSQL文を入れたいです。

    こんばんは。 いつもお世話になっております。 またはまってしまったみたいで、どうにもわからなく なってしまいました。 どうかご指導よろしくお願いいたします。 使用環境はPHP5+Apche+MySQL4.0です。 2つのテーブルから【一覧リスト】というページを作って mysq_fetch_array関数で、行をループで呼び出しました。 ここまでは出来たのですが、取り出したキー情報を もとに、別テーブルの情報(文字列)を取り出したい のです。 以下、試してみたコードです。 //SQL発行 $rs = mysql_query("select * from uriage", $conn); //1件ずつ取り出すループ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC)){ echo "<tr>"; echo "<td>".$rec['oder_no']."</td>"; $sql = "(select*from syouhin where syouhin_id = '".$rec["syouhin_id"]."')"; $res = mysql_query($sql); $rows = mysql_fetch_array($res); echo $rows["syouhin_name"]; echo "<td>".$rec['siiresaki']."</td>"; echo "<td>".$rec['tanka']."</td>"; echo "</tr>"; } Parse error: syntax error, unexpected T_ECHO というエラーが返ってきています。 エラーの行数はecho $rows["syouhin_name"]; の部分です。 何が悪いのかすら判らなくて…。 どうか、ご指導よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう