繁体   English   中英

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

[英]Use PHP to get Column Names and Data for CSV export (MYSQL)

我需要一种通过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);

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

由于您使用的是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);
    // ..
}

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

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

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

即使结果集中没有行,此方法也有效。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM