人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

mysqlでテキスト(タブ区切り)を生成する方法

phpとmysql5.1.22を利用しています。これを用いて、mysql_fetch_arrayで取り出したデータをテキスト(タブ区切り)で生成して、ダウンロードさせるにはどうしたら良いでしょうか?

今、単純に、フィールド名とデータが
index data
1 sample1
2 sample2
で、これを
インデックス データ
1 sample1
2 sample2
という風にsamples.txtで出力したいと思っています。

イメージとしては、ダウンロードボタンを押せばsamples.txtを名前をつけて保存するようにコマンドボックスが出る感じです。
もしくは、生成したデータのダウンロードへのハイパーリンクをテキストで表示させても良いです(これはファイルが生成された後、その存在を調べて表示しないといけないので大変そうですが)。

よろしくお願いします。

●質問者: ReoReo7
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:INDEX MySQL PHP txt イメージ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● deflation
●60ポイント ベストアンサー

以下のパラメータとします。

DBホスト名 localhost
DBユーザー名 user_hoge
DBパスワード psw_hoge
テーブル名 TABLE

プログラムは以下のようになります。

<?php
$outstr = '';
$link = mysql_connect('localhost', 'user_hoge', 'psw_hoge');
$sql = 'select * from TABLE where 1;';
$res = mysql_query($sql, $link);
while ($row = mysql_fetch_array($res)) {
 $outstr .= sprintf("%s\t%s\n", $row['index'], $row['data']);
}
mysql_close($link);
header('Content-Type: text/plain'); 
header('Content-Disposition: attachment; filename="samples.txt"'); 
header('Content-Length: '. strlen($outstr));
echo $outstr;
?>
◎質問者からの返答

ありがとうございます!

全く知らないコマンドだらけですが・・・

$outstrに格納して、それを出力しているのですね。

冒頭に

インデックス\tデータ\n

というカラム名は最初の1行に出力されるのでしょうか?

(あっ、それはもう最初に

$outstr .= sprintf("%s\t%s\n", 'インデックス', 'データ');

とすれば良いのか。)

ありがとうございました。

クライアント側で処理させたい動作がありましたので、助かりました。

追伸:ダウンロードの指示が出るのでしょうか。今手元に環境が無いので、明日試してみます!

追伸2:3/26、php中のif($result)の直後に上記スクリプトを組み込んでみました:

if($result){

$outstr = '';

while ($row = mysql_fetch_array($result)) {

$outstr .= sprintf("%s\t%s\n", $row['index'], $row['data']);

}

header('Content-Type: text/plain');

header('Content-Disposition: attachment; filename="samples.txt"');

header('Content-Length: '. strlen($outstr));

echo $outstr;

すると、このphpを実行した瞬間、samples.txtのダウンロードが始まり、それをメモ帳で開くと、全ての表示される予定だったHTMLが表示されました。

$outstr .= sprintf("%s\t%s\n", $row['index'], $row['data']);

の部分だけを表示させることはできないでしょうか?

素人で隅から隅まで指示しないとできず申し訳ありませんが、よろしくお願いします。


2 ● chuken_kenkou
●45ポイント

MySQLのSELECT文で、INTO OUTFILE句を使えば、カンマ区切りやタブ区切りでテキストファイルに出力できますから、参考まで。


SELECT文のINTO OUTFILE句のマニュアル記載

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.7 SELECT 構文


区切りなどのオプション(LOAD DATA INFILE文)のマニュアル記載

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.5 LOAD DATA INFILE 構文

◎質問者からの返答

ご連絡ありがとうございます。

2つ目のページを一通り読みましたが、20%程度しか理解できませんでした。

1つ目のページの該当箇所は30%くらい分かったと思います。

INTO OUTFILE を利用する事はできません。その場合、クライアント ホスト上にファイルを生成する為には、代わりに mysql -e "SELECT ..." > file_name のようなコマンドを利用しなければいけません。

あたりが関係していることが分かりました。

サンプルが無いとphpにどう落とし込んでよいのか分かりかねますので、サンプルを探してみます。

あれば回答くださると嬉しいです。


3 ● taroe
●30ポイント

http://ma-bank.com/item/602

CSVファイルですが考えかたは同じなので参考に

◎質問者からの返答

ありがとうございます。CSVですがテキストに応用することを考えてみようと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ