用PHP中的MySQL表数据创建CSV文件

时间:2015-01-10 21:55:59

标签: php mysql csv

我在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循环中的数据

我检查循环并回显循环内的数据,显示正常

4 个答案:

答案 0 :(得分:3)

fputcsv将第二个参数作为数组(),“你已经在循环之外使用fputcsv将第二个参数传递为数组”[*],其中包含两个值。 尝试在循环中做同样的事情:

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

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

答案 1 :(得分:0)

仅选择所需的列:

$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文件中的字段的值数组。

答案 2 :(得分:0)

由于您直接将数据发送到客户端,您应该回复它而不是将其保存到文件中:)改为打开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已弃用,使用mysql i 或PDO

答案 3 :(得分:0)

结帐 manual中的mysql_fetch_array,我们可以说:

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

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