我在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循环中的数据
我检查循环并回显循环内的数据,显示正常
答案 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)