我有这段代码可以完美地将表导出到 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);
这取决于你到底想要什么。
假设您只需要表头,如果表中有一些数据,则可以这样做:
$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 文件中始终有标题,即使没有数据行,那么您可以对其进行硬编码。