• ベストアンサー

MYSQLからデータを取り出して表示したい

度々お世話になります。解説書を見ながらMySQLのデータを取り出して表示させようとしているのですが、理解に苦労しています。その本のやり方は以下の通りです。 *サーバ接続済み *データベース選択済み *使用するテーブル名:joke *使用するコラム:joketext $result = @mysql_query('SELECT joketext FROM joke'); if (!$result) { exit('<p>Error performing query: ' . mysql_error() . '</p>'); } while ($row = mysql_fetch_array($result)) { echo '<p>' . $row['joketext'] . '</p>'; } 1.$resultの中にはTURE/FALSE以外に何か入っているのでしょうか?多分データベースのデータがストックされていくのだと思うのですが、この変数には二種類のデータ(true/falseと実際のデータ)が入っているという解釈でよろしいでしょうか? 2.mysql_fetch_arrayですが、これが6行目でやっていることは、$resultからデータを取り出して行に配列していくということでよろしいでしょうか? 3.完全に解らないのは、$row['joketext']の部分で、いったいぜんたいこれは何をやっているんでしょうか?変数の後に[ ]が出てくるパターンはこの本では初めてなのですが、解説されていません。 4.echo '<p>' . $row['joketext'] . '</p>'; の部分で、このピリオドはどういった役割をしているのでしょうか?これも本では初めて出てくるのですが、解説されていなくて困っています。 たくさんの質問になりますが、ひとつでも解る方おられましたら、どうぞよろしくお願いします。

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

  • ベストアンサー
  • nekomilk
  • ベストアンサー率24% (20/83)
回答No.2

PHPのmysql関連はあまり使った事がありませんが、参考になれば幸いです。 >1.$resultの中にはTURE/FALSE以外に何か入っているのでしょうか? 入っていません。 0のFALSEか、非0のTRUEが入ります。この時、selectが成功した場合、非0の結果を示すIDが入ると定義されているようです。なので、TRUEの場合は、1とか2とか100とかの数値が返却されます。 気になっている実際のデータは、ここでは返却されません。(次、参照) >2.mysql_fetch_arrayですが、これが6行目でやっていることは、$resultからデータを取り出して行に配列していくということでよろしいでしょうか? (少しだけ)違います。 $resultには、FALSE(=0)かTRUE(=非0の結果を示すID)しか入っていません。実際のデータは、結果を示すIDをmysql_fetch_arrayに指示して初めて取得できます。(そして$rowに配列として代入されます。) >3.完全に解らないのは、$row['joketext']の部分 これは連想配列と呼ばれています。 普通の配列は $row[0] とする事で最初の要素の中身が返却されますが $row['joketext']とすると、joketextというキー(この場合は、フィールド名)に対応する要素の中身が返却されます。(参考URLに乗せておきました。) >4.echo '<p>' . $row['joketext'] . '</p>'; ピリオドは、文字列の連結を行います。この例だとjoketextフィールドの中身の文字列を <p></p>で囲って echoで出力表示するという意味ですね。 それでは、頑張って下さい(^^/

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k01.htm
jyuu
質問者

補足

返事が遅くなってしまいすみません。理解に手こずっていました。 >$rowに配列として代入されます。 この部分ですが、mysql_fetch_array($result)は変数$rowを、$resultでmysql_queryが選択したフィールドをインデックスとして配列にする、という解釈でよろしいでしょうか?

その他の回答 (1)

回答No.1

私もPHP&MySQLは勉強中の身なのですが… 1. これは接続できなかったときに、 Error performing query: ' . mysql_error() を出力するためのもので、true/falseだけだった気がします。 $result = @mysql_query('SELECT joketext FROM joke'); の下に echo "$result"; を追加して変数の中身をダンプ(表示)させ、チェックしてみて下さい。 変数の中身が分からない時など、ダンプさせるのは基本ですよ。 2. >$resultからデータを取り出して行に配列していくということでよろしいでしょうか? その通りです。 http://php.s3.to/man/function.mysql-fetch-array.html をご参考に。 3. 引用符「'」でくくった文字列と、配列「$row」の要素をくっつけているようです。 4. 私も悩んだことがあります(笑 これは、コマンドをくっつけています。 ピリオドをつけることにより、1文で書けるんです。 ピリオドを使わない場合はこんな感じ。 echo '<p>'; $row['joketext']; echo '</p>'; 以上、ご参考になれば幸いです。

jyuu
質問者

補足

ありがとうございます。返事が遅くなってしまいました。教えていただいたことをヒントに何とか理解しようとしていたのですがなかなか時間がかかってしまいました。mysql_fetch_arrayが何をしているのかをよく理解できていなかったのがそもそも混乱してしまった原因だったようです。えと、$resultをechoしてみました。「Resource id#3」が表示されましたがこれは何かご存知でしょうか?

関連するQ&A