使用 PHP 获取 CSV 导出的列名和数据 (MYSQL)

Posted

技术标签:

【中文标题】使用 PHP 获取 CSV 导出的列名和数据 (MYSQL)【英文标题】:Use PHP to get Column Names and Data for CSV export (MYSQL) 【发布时间】:2016-08-13 19:38:31 【问题描述】:

我需要一种通过 php 将我的 mysql 数据库导出为 CSV 的方法,但我还需要选择列名。到目前为止,除了获取列名之外,我有以下内容可以满足我的所有需求。

echo "Export Starting \n";
$SQL = ("SELECT *
FROM INF_TimeEntries
WHERE Exported IS NULL");
$result = mysqli_query($db_conn, $SQL) or die("Selection Error " . mysqli_error($db_conn));
echo "Export Data Selected \n";
$fp = fopen('../updateDatabase/timesheetExport/TimeEntries.csv', 'w');
echo "Starting Write to CSV \n";
while($row = mysqli_fetch_assoc($result))
    fputcsv($fp, $row);
    $RowID = $row['ID'];
    $exportTime = date("Y-m-d H:i:s");
    $sql = ("UPDATE INF_TimeEntries
                    SET Exported = '$exportTime'
                    WHERE ID = '$RowID'");
    if ($mysqli_app->query($sql) === TRUE) 
    
    else 
        echo date("Y-m-d H:i:s")."\n";
        echo "An Error Occured please contact the administrator ". $mysqli_app->error."\n";
    

echo "Export Completed \n";
fclose($fp);
mysqli_close($mysqli_app);
mysqli_close($db_conn);

我不确定我将如何实现这一目标。我不仅需要获取列名,还需要获取列名和每个列中包含的数据。我在建议的其他问题中没有找到任何关于此的信息。

【问题讨论】:

Get table column names in mysql?的可能重复 我读了这篇文章,发现它并没有真正帮助我。因此,我发布了自己的问题 您似乎想要列名(并且正如您评论给出的答案,而不是硬编码),并且该问题回答了如何动态获取表的列名。那么您的问题不是现在如何获取列名吗? 【参考方案1】:

听起来很简单,只要其他一切都已经为您工作了。您可以在 while 循环之前使用列名和 fputcsv($fp, $array_of_column_names) 创建一个数组。

【讨论】:

如何获取列名数组?我不想硬编码。 使用 phpmyadmin 或 mysql workbench 等管理界面查看数据库。 我在您编辑之前回复了您的评论。如果您不想对其进行硬编码,则链接的可能重复项确实显示了如何执行此操作。如何选择列,即;不一定如何将它们附加到 CSV。 再想一想,与运行另一个查询来获取列名相比,其他两个答案提供了更好的选择。【参考方案2】:

mysqli_query() 方法中设置$result 后,您可以使用mysqli_fetch_fields() 返回结果集中列的描述数组。

该数组的每个元素都是一个具有多个属性的对象。一个属性是name - 您可以将其用作 csv 文件的标题。您还可以获得max_lengthlengthtable 等属性。 linked documentation 显示了使用此元数据的示例。

如果您的查询比SELECT * FROM table 更复杂,则此元数据特别有用:如果您为查询中的列分配别名,它们会显示在元数据数组元素的name 属性中。

即使结果集中没有行,这也有效。

【讨论】:

【参考方案3】:

由于您使用的是mysqli_fetch_assoc,因此列的名称是每次迭代中$row 数组的键。您可以在第一次迭代中将其放入文件中:

echo "Starting Write to CSV \n";
$first = true;
while($row = mysqli_fetch_assoc($result))
    if ($first) 
        fputcsv($fp, array_keys($row));
        $first = false;
    
    fputcsv($fp, $row);
    // ..

【讨论】:

以上是关于使用 PHP 获取 CSV 导出的列名和数据 (MYSQL)的主要内容,如果未能解决你的问题,请参考以下文章

php导出csv文件大小怎么去除限制

将 parquet 文件模式导出为 JSON 或 CSV

php 导入/导出 csv 文件

通过PHP导出CSV以获取utf-8字符

php怎么导出大量数据的Excel

如何使用PHP导出csv和excel文件