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

解決済みの質問

CSVに項目(カラム名)を

お世話になっております。
データベースにあるデータをCSV形式のファイルとしてダウンロードすべく、以下のようなソースを記述しておりますが、そのデータに項目名(カラム名)を共に表示(挿入)させようとすると、項目名が行単位で表示されてしまいます。

//$str .= "ID,E-Mail,password,氏名,郵便番号,都道府県,住所,TEL,FAX,URL\n";

$sql= "SELECT * FROM member order by id";
$res = mysql_query($sql, $con) or die("検索に失敗しました");
while($row = mysql_fetch_array($res, MYSQL_ASSOC)){

$str = $row["id"].",".$row["mail"].",".$row["pass"].",";
$str .= $row["name"].",".$row["post_no"].",";
$str .= $row["address1"].",".$row["address2"].",";
$str .= $row["tel"].",".$row["fax"].",".$row["url"];

1行目だけに項目名を表示させたいので、whileの始まる前にカラム名を$strに代入したのですが、考え方として他にどうすれば宜しいのでしょうか?
お忙し中恐縮ですが、アドバイスのほど頂戴出来れば幸いです。宜しくお願い申し上げます。

投稿日時 - 2010-04-13 10:35:47

QNo.5822712

すぐに回答ほしいです

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

ちょっと意図がわからないのですが・・・
そもそも

while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
$str = $row["id"].",".$row["mail"].",".$row["pass"].",";
$str .= ・・・
}

としたら$strは毎回上書きされるので最終行しか拾えなくないですか?

逆にヘッダの挿入だけなら
$str = "ID,E-Mail,password,氏名,郵便番号,都道府県,住所,TEL,FAX,URL\n";
while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
$str .= $row["id"].",".$row["mail"].",".$row["pass"].",";
$str .= ・・・
}

的な処理で十分じゃないですか?
もしくはヘッダは$headerにいれといて、出力の際に、$headerと
$strを出力するとかもありかと

投稿日時 - 2010-04-13 11:00:12

お礼

yambejp様

お世話になっております。早々のアドバイスをありがとうございます。
(こちらからのご挨拶が遅れて申し訳ありません)

>としたら$strは毎回上書きされるので最終行しか拾えなくないですか?

確かに言われてみればそうなのですが、上書きされずに正常にデータ順に出力しています。

while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
$str .= $row["id"].",".$row["mail"].",".$row["pass"].",";
$str .= ・・・
}

とやってみると、イメージ的に

1
1
2
1
2
3
1
2
3
4

といった感じになってしまします。
いずれにせよ、

>もしくはヘッダは$headerにいれといて、出力の際に、$headerと
>$strを出力するとかもありかと

こちらのやり方で上手く行きました。ありがとうございました!

投稿日時 - 2010-04-15 20:53:04

ANo.1

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

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

回答(2)

ANo.2

何故にプログラムでわざわざCSV化しているのかがちょっと判りませんが、この質問のソースからして一行目に行として項目名が列挙されるのはある意味当然ですよね。だってわざわざ$strに行を代入しているわけですから。それともこの行の中にあるカンマが表示されないということなのですか?
最も簡単なのはコマンドで一発出力だと思いますけど違うの?

参考URL:http://it.kndb.jp/entry/show/id/1056

投稿日時 - 2010-04-13 11:22:04

お礼

1108435様

早々のアドバイスをありがとうございます。
こちらからのご挨拶が遅れて申し訳ありません。
CSV化する目的はファイルとして保存させたいと依頼があってのことでした。
いずれにせよ、上手く行くことが出来ました。ありがとうございました。

投稿日時 - 2010-04-15 20:56:14

あなたにオススメの質問