如何导入 CSV 文件中的列名称

问题描述 投票:0回答:1

我有这段代码可以完美地将表导出到 CSV 文件,但它不会插入标题列名称。

<?php

$host = 'host';
$mydatabase = 'db';
$user = 'user';
$pass = 'pass';
try {
    $db = new PDO('mysql:host='.$host.';dbname='.$mydatabase, $user, $pass);
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
    die();
}

$sql = 'SELECT * FROM table ORDER BY id ';

$stmt = $db->prepare($sql);
$stmt->execute();

if ($output != '') {
    $output .= "\n";
}

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $output .= '"'.$row['id'].'",';
    $output .= '"'.$row['name'].'",';
    $output .= '"'.$row['surname'].'",';
    $output .= '"'.$row['etc'].'",';
    $output .= "\n";
}

$file = 'table.csv';
$f = fopen($file, 'w');
fwrite($f, $output);
fclose($f);
php mysql csv
1个回答
0
投票

这取决于你到底想要什么。

假设您只需要表头,如果表中有一些数据,则可以这样做:

$sql = 'SELECT * FROM table ORDER BY id ';

$stmt = $db->prepare($sql);
$stmt->execute();

$fp = fopen('table.csv', 'w');

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
if($data !== []) {
    fputcsv($fp, array_keys($data[0]));
    foreach ($data as $row) {
        fputcsv($fp, $row);
    }
}

fclose($fp);

但是,大多数人会告诉您

SELECT *
是个坏主意。您应该明确列出所有列。如果您可以在 SQL 中列出列,那么您也可以在 CSV 生成脚本中列出它们。一点点重复也没什么问题。

如果您希望 CSV 文件中始终有标题,即使没有数据行,那么您可以对其进行硬编码。

© www.soinside.com 2019 - 2024. All rights reserved.