這次要運用 PHP 中的 PDO 物件來連線至 MySQL 資料庫,接著取得整個資料表(即所有資料筆數),這邊要注意!若遇上資料表很大的情況可能導致記憶體崩潰,請注意伺服器系統資源的使用,當然也可以使用 SQL 語法 LIMIT
來限制資料筆數。我們這邊使用 PDO::FETCH_ASSOC
來取得結果集,它會傳回以欄位名稱作為索引鍵(Key)的陣列(Array),這樣就能將欄位名稱放到 CSV 檔的最上方。檔案名稱可指定,中途有運用指針指向 php://output
,它允許向輸出緩衝機制寫入資料,接著運用 fputcsv
方法來將資料寫入 CSV 檔中,最後記得設定 Content-Type 和 Content-Disposition 標頭以強制進行下載。
我們要準備兩個 PHP 檔案,分別是 PDO 資料庫連線用的資訊檔案及進行資料取得與 CSV 下載的 PHP 檔案。
database.php - PDO 資料庫連線用的資訊
<?php
try {
$db = new PDO(
'mysql:host=[host];dbname=[dbname];port=3306;charset=utf8',
'[username]',
'[userpassword]' );
} catch (PDOException $e) {
echo '資料庫連線錯誤';
exit;
}
?>
記得依照您的環境來設定資料庫所在的主機位址(本機通常為 localhost
),還有資料庫名稱、使用者名稱及密碼等資訊。
downloadCSV.php - 進行資料取得與 CSV 下載
<?php
// 資料庫連線
include_once "database.php";
// 使用 SQL 語法取得資料
$statement = $db->prepare('SELECT * FROM data_table');
$statement->execute();
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
// 取得欄位名稱
$columnNames = array();
if (!empty($rows)) {
// 只需要掃描結果的第一行,以整理欄位名稱
$firstRow = $rows[0];
foreach ($firstRow as $colName => $val) {
$columnNames[] = $colName;
}
}
// 設定 CSV 下載時的檔名
$fileName = 'export.csv';
// 設定 Content-Type 和 Content-Disposition 標頭以強制下載
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
// 打開檔案的指針
$fp = fopen('php://output', 'w');
// 首先將欄位名稱寫入檔案
fputcsv($fp, $columnNames);
// 然後,將其餘所有資料寫入檔案
foreach ($rows as $row) {
fputcsv($fp, $row);
}
// 關閉檔案的指針
fclose($fp);
?>
只要用瀏覽器開啟 downloadCSV.php 就會自動取得指定資料表內的資料,接著立即生成 CSV 檔進行下載。
希望這個教學可以幫助到大家!
▲ 精選圖片。
贊助廣告 ‧ Sponsor advertisements
留言區 / Comments
萌芽論壇