MySQLからPHPを利用してCSV出力する

2004/12/22

掲示板で話題になったのですが、私自身もよく使うので、自分のためにもまとめました。

ここではMySQLからデータを読み込んでCSVデータを出力するサンプルを書いておきます。

なお、このサンプルでは「"」「,」などの文字がデータに含まれるとき、その対処をしてありませんので実際にはその処理を別途に考える必要があります。

<?php

////////////////////////////////////////////////////
//  MySQLデータベースからCSV出力するサンプル
////////////////////////////////////////////////////

// ダウンロードするファイル名
$down_file = date('Ymd') . '.csv';

// MySQL関係のパラメータ設定
$dbHost = 'localhost';
$dbUser = 'sg';
$dbPass = 'sg_pass';
$sql    = 'SELECT * FROM test_db.テストテーブル';


// MySQLへ接続
if (!$conn = @mysql_connect($dbHost, $dbUser, $dbPass))
    trigger_error("MySQL接続エラー", E_USER_ERROR);

// CSVデータの生成 -> $csv[]
// $csv[]は、CSV1行で1つの要素となっている配列
if (!$rs = mysql_query($sql, $conn))
    trigger_error("クエリー実行エラー", E_USER_ERROR);

while ($rec = mysql_fetch_row($rs)) {
    if (isset($buf)) unset($buf);
    foreach ($rec as $val) {
        if (is_numeric($val))
            $buf[] = $val;
        else
            $buf[] = '"' . $val . '"';
    }
    $csv[] = implode(',', $buf) . "\r\n";
}

// CSVの出力
header ("Content-Type: application/force-download");
header ("Content-Disposition: attachment; filename=" . $down_file);
header ("Content-Description: File Transfer");
header ("Content-Length: " . strlen(join("",$csv)) );
foreach ($csv as $mval) {
    echo mb_convert_encoding($mval,'SJIS-win');
    flush();
    ob_flush();
    usleep(10000); 
}
?>

参考資料

Marijuanaさんに掲示板でお聞きした内容のままです。

Copyright©2001-2008 釣ったよ! All Right Reserved.    sg@tsuttayo.sytes.net