从 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
检查 php manual 中的 mysql_fetch_array
,所以,我们可以说:
...
while($result = mysql_fetch_array($rs,MYSQL_NUM)) {
fputcsv($output, $result);
}
只需将第二个可选参数 MYSQL_NUM
添加到 return 数值数组,并将其全部作为 fputcsv
中的参数提供。通过这种方式,您将在 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 循环的数据
我已经检查了循环和循环内的回显数据,显示正常
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
检查 php manual 中的 mysql_fetch_array
,所以,我们可以说:
...
while($result = mysql_fetch_array($rs,MYSQL_NUM)) {
fputcsv($output, $result);
}
只需将第二个可选参数 MYSQL_NUM
添加到 return 数值数组,并将其全部作为 fputcsv
中的参数提供。通过这种方式,您将在 csv 文件中获得所有原始字段数据。