从 MySQL Table 中的数据创建 CSV 文件 PHP

creating a CSV file from MySQL Table data in PHP

我在 PHP 中有此代码:

// output headers so that the file is downloaded rather than displayed
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=calls.csv');

// create a file pointer connected to the output stream
$output = fopen($_SERVER["DOCUMENT_ROOT"].'/file_dump/price_tariffs/calls.csv', 'w');

// output the column headings
fputcsv($output, array('Column 1', 'Column 2'));

// loop over the rows, outputting them
$sql="SELECT * from call_costs where sequence < '50' ";
$rs=mysql_query($sql,$conn);
while($result = mysql_fetch_array($rs)) {
    fputcsv($output, $result["number"]);
}

它在 price_tariffs 目录中创建了文件名 calls.csv,但它只添加了第 1 列和第 2 列,而不是来自 while 循环的数据

我已经检查了循环和循环内的回显数据,显示正常

fputcsv 将第二个参数作为一个array(),"and you already used fputcsv outside of the loop passing the second param as an array"[*] 里面有两个值。 尝试在你的循环中做同样的事情:

fputcsv($output, array($result["number"], $result["somethingelse"]));

[*]:已编辑,在下面的评论中澄清后添加了引用的句子。

Select 只有您想要的列:

$sql = "SELECT column1, column2 FROM call_costs WHERE sequence < '50'";

然后使用mysql_fetch_assoc()获取每一行作为关联数组,并输出:

$rs=mysql_query($sql,$conn);
while($row = mysql_fetch_assoc($rs)) {
    fputcsv($output, $row);
}

fputcsv() 的第二个参数应该是应该放入 CSV 文件字段中的值的数组。

由于您是直接将数据发送到客户端,因此您应该回显它而不是将其保存到文件中:)改为打开 php://output:

试试这个(来自 powtacs answer

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=calls.csv');

// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');

// output the column headings
fputcsv($output, array('Column 1', 'Column 2'));

// loop over the rows, outputting them
$sql="SELECT * from call_costs where sequence < '50' ";
$rs=mysql_query($sql,$conn);
while($result = mysql_fetch_assoc($rs)) {
    fputcsv($output, $result);
}

另请注意 mysql 已贬值,您 应该 使用 mysqli 或 PDO

检查 manual 中的 mysql_fetch_array,所以,我们可以说:

...
while($result = mysql_fetch_array($rs,MYSQL_NUM)) {
    fputcsv($output, $result);
}

只需将第二个可选参数 MYSQL_NUM 添加到 return 数值数组,并将其全部作为 fputcsv 中的参数提供。通过这种方式,您将在 文件中获得所有原始字段数据。