繁体   English   中英

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

[英]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将第二个参数作为一个数组(),“你已经在循环之外使用了fputcsv,将第二个参数传递为一个数组”[*],里面有两个值。 尝试在循环中做同样的事情:

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

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

仅选择所需的列:

$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回答

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

查看 手册中mysql_fetch_array ,我们可以说:

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

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

暂无
暂无

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

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