データベースMySQLから読み出したデータを表示できない - PHPプロ!Q&A掲示板

2714

  • 0P

データベースMySQLから読み出したデータを表示できない

質問日時 / 2010年5月18日 11:37    回答数 / 2件

Questioner:  masahiroyamamoto  このエントリーをはてなブックマークに追加 

データベースMySQLから読み出したデータを表形式のHTML文で表現するPHPプログラムを作成しましたが、
データベースのデータが表示されません。
ただ、データベースのフィールド名を表示する部分までは同じで、
データ部分以降を取り出し表示する部分を別形式で表現すると、正しく表示されます。

*PHPプログラム1:何も表示されない
<!--  HTMLの開始 -->
<HTML>
<HEAD>
<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=\"Shift_JIS\">
<TITLE>address1</TITLE>
</HEAD>

<?php
//DBへ接続開始 サーバー名--localhost ユーザー名--root パスワード--mysql
$dbHandle = mysql_connect("localhost","root","mysql")
  or die("can not connect db\n");
  
//MySQLのクライアントの文字コードをsjisに設定
mysql_query("SET NAMES sjis")
or die("can not SET NAMES sjis");


//db名  addressdb
$db = "addressdb";

//SQL文 tab1表から全行を取り出し、number列の昇順に整列する
$sql = "select * from address order by number";

//SQL文を実行する
$rs = mysql_db_query($db,$sql);

//列数を取得する
$num = mysql_num_fields($rs);
?>

<!-- HTML文を出力 テーブルの開始を指定 -->
<table border=1>
<?php
//test表の列数と同じ回数を繰り返す
for ($i=0;$i<$num;$i++){
?>
<!--HTML文を出力 列名を <td>で囲んで出力-->
<td>
<?php
//フィールド名を表示する
mysql_field_name($rs,$i)
?>
</td>
<?php
}

//test表の行数と同じ回数を繰り返す
while($row=mysql_fetch_array($rs)){
?>
<!-- HTML文を出力 表の行の開始<tr> を出力 -->
<tr>
<?php
//test表の列数と同じ回数を繰り返す
for($j=0;$j<$num;$j++){
?>
<!--//HTML文を出力 列の内容を <td>で囲んで出力 -->
<td>
<?php
$row[$j]
?>
</td>
<?php
}
?>
<!--//HTML文を出力 表の改行</tr> を出力-->
</tr>
<?php
}
?>
<!--//HTML文を出力 テーブルの終了を指定-->
</table>
<?php
//結果レコードをメモリから開放
mysql_free_result($rs);

//DBへの接続を切断
mysql_close($dbHandle);

?>
<br>
<a href="address.php">メニュー</a><br>

*PHPプログラム2:正しく表示される。

<!--  HTMLの開始 -->
<HTML>
<HEAD>
<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=\"Shift_JIS\">
<TITLE>address1</TITLE>
</HEAD>

<?php
//DBへ接続開始 サーバー名--localhost ユーザー名--root パスワード--mysql
$dbHandle = mysql_connect("localhost","root","mysql")
  or die("can not connect db\n");
  
//MySQLのクライアントの文字コードをsjisに設定
mysql_query("SET NAMES sjis")
or die("can not SET NAMES sjis");


//db名  addressdb
$db = "addressdb";

//SQL文 tab1表から全行を取り出し、number列の昇順に整列する
$sql = "select * from address order by number";

//SQL文を実行する
$rs = mysql_db_query($db,$sql);

//列数を取得する
$num = mysql_num_fields($rs);
?>

<!-- HTML文を出力 テーブルの開始を指定 -->
<table border=1>
<?php
//test表の列数と同じ回数を繰り返す
for ($i=0;$i<$num;$i++){
?>
<!--HTML文を出力 列名を <td>で囲んで出力-->
<td>
<?php
//フィールド名を表示する
mysql_field_name($rs,$i)
?>
</td>
<?php
}

//test表の行数と同じ回数を繰り返す
while($row=mysql_fetch_array($rs)){
?>
<!-- HTML文を出力 表の行の開始<tr> を出力 -->
<tr>
<?php
//test表の列数と同じ回数を繰り返す  ≪注 PHP1プログラムとこれ以降が違う≫
for($j=0;$j<$num;$j++){

//HTML文を出力 列の内容を <td>で囲んで出力
print("<td>".$row[$j]."</td>");
}
//HTML文を出力 表の改行</tr> を出力
print("</tr>");
}

//HTML文を出力 テーブルの終了を指定
print("</table>");

//結果レコードをメモリから開放
mysql_free_result($rs);

//DBへの接続を切断
mysql_close($dbHandle);

?>
<br>
<a href="address.php">メニュー</a><br>

以上です。よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01shimixえっと・・。ソースが長いのですが結果として ・表
┗A02yuu_a0>>CODE <?php header('Content-Type: text/plain');

回答一覧

並び替え:

A01
answerershimix [5月18日 17:48]

えっと・・。ソースが長いのですが結果として

・表示されない
  1. <td>
  2. <?php
  3. $row[$j]
  4. ?>
  5. </td>
・表示される
  1. print("<td>".$row[$j]."</td>");

ということでよろしいでしょうか?$row[$j]だけを記述して、内容がブラウザに返ることを期待されたのは何故でしょう。ひょっとして、前者は

  1. <td>
  2. <?php
  3. print $row[$j];
  4. ?>
  5. </td>

と書いた「つもり」になっておられませんか?

この意見に回答する

ツリーへ TOPへ

A02
answereryuu_a0 [5月19日 04:33] (最終編集:5月19日 07:39)

  1. <?php
  2. header('Content-Type: text/plain');
  3.  
  4. $dbHandle = mysql_connect('localhost''root''mysql') or die("can not connect db\n");
  5. mysql_select_db('addressdb') or die();
  6.  
  7. function_exists('mysql_set_charset') ? mysql_set_charset('sjis') : mysql_query('SET NAMES "sjis"');
  8.  
  9. $rs = mysql_query('SELECT * FROM `address` ORDER BY `number`');
  10.  
  11. header('Content-Type: text/html; charset=Shift_JIS');
  12. ?>
  13. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  14. <html>
  15. <head>
  16.   <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
  17.   <title>address1</title>
  18. </head>
  19. <body>
  20.  
  21. <?php if(($row = mysql_fetch_assoc($rs)) !== false) : ?>
  22. <table border=1>
  23.   <tr>
  24. <?php foreach(array_keys($row) as $field_name) : ?>
  25.     <th><?php echo htmlentities($field_nameENT_QUOTES'sjis')?></th>
  26. <?php endforeach?>
  27.   </tr>
  28. <?php do : ?>
  29.   <tr>
  30. <?php foreach($row as $value) : ?>
  31.     <td><?php echo htmlentities($valueENT_QUOTES'sjis')?></td>
  32. <?php endforeach?>
  33.   </tr>
  34. <?php while($row = mysql_fetch_assoc($rs))?>
  35. </table>
  36. <?php endif?>
  37.  
  38. <p><a href="address.php">メニュー</a></p>
  39. </body>
  40. </html>

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)