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

締切り済みの質問

PHP + Mysql で特定のフィールドの値を全て表示したいのですが・・・。

id、url、titleなどを格納してるテーブルがありまして、
全てを表示させるのはわかったのですが、
idとurlだけなどといった特定のフィールドの値を全て
表示させ方が分かりません。
検索かけて探してはいるものも、探し方が悪いのか
見つからなかったので質問してみました。

それと、phpmyadmin上では日本語の文字化けはしてないのですが
ブラウザ上ではどうも文字化けしてしまいます。
utf8で格納しているはずなのですが、mysqlで表示させるときはsjisでないと文字化けします。
ちなみに照合順序はutf8_unicodeです。

投稿日時 - 2008-06-20 00:29:35

QNo.4114255

困ってます

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

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

回答(6)

ANo.6

そしてNo1です

No5さん、ご指摘ありがとうございます。

PHPのprintって関数じゃないんですね。
bool返すか返さないかって違いだけとは!

こんなところも、良くも悪くもPHPって感じですなぁ・・・・・

投稿日時 - 2008-06-24 10:59:07

ANo.5

思い違いがあるようなので#3についてちょっと指摘を・・・。

たんにprintは戻り値をもつ言語構造であって、関数ではありません。
逆に()は飾りみたいなもんです。
たとえばprint(2)+3;とすると5が表示されます。関数なら変ですよね

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

その他PHPにはincludeなど制御構造でありながら戻り値のあるものは
いくつかあります。
個人的には関数と切り分けるためカッコをつけない方をオススメします。
ヒアドキュメントの出力など関数で表現するはむずかしいですね
print <<<eof
hogehoge
eof;

投稿日時 - 2008-06-21 15:54:05

ANo.4

再度、No1です

>この場合のidの最小値、最大値はどうやって出してやればいいのでしょうか?
先ほどのSQL文で取得できるのは、各idの最新版の一覧を取得するSQLです。
二通りの方法が考えられます。
・取得してきた結果セット内で最小(最大)のidを知りたい。
・最大値、最小値を知るためだけのSQLをクエリーする。


取得してきた結果セット内で最小(最大)のidが知りたいのであれば、あとはPHP側で操作することになります。
~ORDER BY id ASC
で取得してきた0レコード目(1行目)には最小値のidが、最終行には最大値のidが入ってきます。
配列の一番最初の行を見れば最小のidを取得できる。
$result[0]['id'] とかね


最大値、最小値を知るためだけのSQLをクエリーする場合は・・・
そろそろ自分で調べましょうね。
http://www.google.co.jp/search?q=MySQL+%E6%9C%80%E5%B0%8F%E5%80%A4+%E6%9C%80%E5%A4%A7%E5%80%A4&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_jaJP275JP275
idの最小値または最小値だけを取得するSQLを別途作ってあげてクエリーすることになります。

投稿日時 - 2008-06-20 18:12:13

ANo.3

またまたNo1です

>参考書の方よりweb上で探して見ているんですけど、
>結構()がついてなかったりするのもありました・・・。
たしかに、参考書やwebで書かれているもので、print文に ()をつけていないものも見受けられます。
しかしそれらは正しい知識を持った上で省略している人であれば良いのですが、「とりあえず省略しても動くし~」という物事の本質を知らないまま省略することはやめましょうという意味で、私は回答しました。
たとえば
print()のほかに画面出力として良く使われるものに
echo があります
echoは厳密には関数ではありません。が echo("あいうえお"); のような使い方もできます
「printは関数なのに、echoは関数ではない ってどゆこと?」
という意味が分かれば ()をつけるつけない の意味が分かってくるかと思います。
ヒントとして
$print = print("print");
$echo = echo("echo");
これを実行してみてください。
printは正常に動くのにechoは構文エラーが出るかと思います。





>>$query = "SELECT id,url FROM ".$table;
>$query = "SELECT id,url FROM ".$table ORDER BY id ASC;
>こうしてしまうと動きませんよね?
まぁ、動きませんね
http://jp.php.net/manual/ja/language.operators.string.php
ここをじっくり読んでください。

$query = "SELECT id,url FROM ".$table." ORDER BY id ASC";
となります。

投稿日時 - 2008-06-20 16:45:43

お礼

重ね重ねありがとうございます。
参考になります。

もう1つお尋ねしたい事があるのですが、
この場合のidの最小値、最大値はどうやって出してやればいいのでしょうか?

投稿日時 - 2008-06-20 17:46:29

ANo.2

ふたたび、No1です。
SELECT id, url FROM テーブル名 ORDER BY id ASC ;
で、idが小さな数値順に並んだ状態で 結果セットが返ってきます。
ちなみに、 ASCの部分をDESCにすると、逆になります。

SQLの基本中の基本的な構文です。もうすこしがんばりましょう。


あと、もうひとつ
最近、出回ってる参考書が悪いのかどうか分からないんですが。
こういう記述の仕方をするPHP初心者の方が非常に多く見受けられます。
print "{$value}<br>\n";

まぁ確かに動くんですが、メリットは特にありません。
. での文字列連結のほうがよっぽど単純明快で処理速度も速くなります
print $value."<br>\n";
こんな感じ。

あと、printは関数ですので、出来れば()つけましょう
print ($value."<br>\n");


同じようにSQL生成のところでも
$query = "SELECT id,url FROM $table";
ではなく
$query = "SELECT id,url FROM ".$table;
としましょう。
ただし注意しなくてはならないのが
$query = "SELECT id,url FROM".$table;
と記述してしまうと、出来上がるSQL文が
SELECT id,url FROMtable
と言った具合にくっついてしまいます。

投稿日時 - 2008-06-20 11:14:24

お礼

度々ありがとうございます。
あまり初心者なのを理由にはしたくはないのですが、
何分、0からのスタートだったので忝いです。
参考書の方よりweb上で探して見ているんですけど、
結構()がついてなかったりするのもありました・・・。

一応無事に動いたのですけれど、

>$query = "SELECT id,url FROM ".$table;
$query = "SELECT id,url FROM ".$table ORDER BY id ASC;
こうしてしまうと動きませんよね?

投稿日時 - 2008-06-20 15:57:32

ANo.1

>全てを表示させる
具体的にどういう方法でおこなったのでしょうか?

単にセレクト文を変えればいいだけでは?
SELECT id, url FROM テーブル名 ;
これで idとurlのみの全レコードを取得できます。

文字化けですが、全てをutf8にすれば問題ありません。
つまり、MySQLの設定も、PHPの設定も、ソースコードも HTMLも すべて utf8で統一させてください。

投稿日時 - 2008-06-20 02:01:52

お礼

回答ありがとうございます。
初歩的な事でした(^^A

$query = "SELECT id,url FROM $table";
$result = mysql_query($query) or die(mysql_error());
while($data = mysql_fetch_assoc($result))
{
foreach($data as $value){
print "{$value}<br>\n";
}
print "<br>\n";
}
という形のものですが、これの場合idの数が早い順ではなく、
URLのa→wの順に並んでしまうのですが、どうしたらいいでしょうか?


一応ソースコードはutf8にしてはあるのですが、
phpとmMySQLの方はデータ格納後にしたものですので、
もう1度データ収集してからやってみます。

投稿日時 - 2008-06-20 04:18:32

あなたにオススメの質問