PHP:運用 PDO 連線取得 MySQL 資料並建立 CSV 下載點

2021/10/20 912 1 網站技術 , 資料庫 , PHP

這次要運用 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

萌芽論壇