[英]PHP MySQL table to CSV with column names
我有以下將表輸出到CSV文件的php函數。 我還需要第一行中的列名。 它可以工作,但是它有一個帶有名稱的列,然后是一個相同的列,但不是名稱,而是列號。 我已經嘗試了很多解決方案以輸出到CSV,這對我來說是最合適的。 但是對於我的一生,我無法弄清楚為什么我得到重復的列。 我喜歡這種解決方案,因為它既干凈又簡單。 這里還有其他解決方案。 我想知道我能使它工作嗎?
我嘗試使用查詢,並使用“ UNION ALL”,但這對我來說效果不佳:
SELECT * INTO OUTFILE "c:/mydata4.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n' FROM tickets
我最有效的功能是:
public function tickets_to_csv() {
$query = $this -> db -> prepare("SELECT * FROM tickets");
try {
$query -> execute();
$data = $query -> fetchAll();
$fp = fopen('report.csv', 'w');
$column_names = array_keys($data[0]);
fputcsv($fp, $column_names);
foreach ($data as $row) {
fputcsv($fp, $row);
}
fclose($fp);
} catch(PDOException $e) {
die($e -> getMessage());
}
}
它創建一個看起來像這樣的文件
Column_1 | 0 | Column_2 | 1 |
Val_1-1 | Val_1-1 | Val_2-1 | Val_2-1 |
Val_1-2 | Val_1-2 | Val_2-2 | Val_2-2 |
Val_1-3 | Val_1-3 | Val_2-3 | Val_2-3 |
對我來說,這應該很好。
編輯:
這是我對@Jessicas答案的解決方案,請更改為:
$data = $query -> fetchAll(PDO::FETCH_ASSOC);
另外,我編輯了該部分以為每一行創建一個新行。 否則在excel中看起來還不錯,但是如果在記事本中打開,那全都是一行。 解決方法如下:
$query -> execute();
$new_line = "\r\n";
$data = $query -> fetchAll(PDO::FETCH_ASSOC);
$fp = fopen('report.csv', 'w');
$column_names = array_keys($data[0]);
$column_names[] = $new_line;
fputcsv($fp, $column_names);
foreach ($data as $row) {
$row[] = $new_line;
fputcsv($fp, $row);
}
您需要將獲取模式設置為僅關聯模式,而不是兩者都設置。
http://www.php.net/manual/zh/pdostatement.setfetchmode.php
PDO :: FETCH_ASSOC(整數)指定fetch方法應將每一行作為由列名索引的數組返回,並在相應的結果集中返回。 如果結果集包含具有相同名稱的多個列,則PDO :: FETCH_ASSOC每個列名稱僅返回一個值。 http://www.php.net/manual/zh/pdo.constants.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.