PHP导出为CSV

时间:2012-09-07 21:30:48

标签: php mysql arrays csv export

  

可能重复:
  PHP Export Excel to specific Path?

我不熟悉PHP导出到excel或csv,但我正在使用PHP MySQL作为本地销售点。 根据下面的代码,这实际上是有效的..但不是应该的方式!所有记录都放在csv文件中的1行,我该如何解决?另外,我如何停止覆盖同一个文件......我的意思是当我点击一个按钮导出csv时,应检查是否有现有的csv文件,如果有 - 创建一个新文件!

谢谢

require_once('connect_db.php');

$items_array = array();

$result = mysql_query("SELECT * FROM sold_items");

while($row = mysql_fetch_array($result))
{
    $items_array[] = $row['item_no'];

    $items_array[] = $row['qty'];
}

$f = fopen('C:/mycsv.csv', 'w');
fputcsv($f, $items_array);
fclose($f);

2 个答案:

答案 0 :(得分:1)

首先

$items_array[] = array($row['item_no'], $row['qty']);

第二,使用变量存储文件名。

$filename = $name = "myscsv";
$index = 1;
while(file_exists($filename.".csv")) {
  $filename = $name.$index;
  $index++;
}

现在你可以保存它;)

$f = fopen("C:/{$filename}.csv", 'w');

答案 1 :(得分:1)

fputcsv似乎只写一行/记录,并在其输出中包含一个行/记录终结符。您需要为报告的每一行调用fputcsv。

dbf的顺序文件路由解决方案在许多情况下都能很好地工作。就个人而言,我发现附加时间戳很有帮助,因为当存在一组现有文件时,它需要的IO更少。此外,即使在修改/复制/触摸报告的情况下,也可以在不必打开报告的情况下知道报告的来源。

次要细节:将查询调整为您使用的列。

<?php

require_once('connect_db.php');

$result = mysql_query("SELECT item_no, qty FROM sold_items");

$timestamp = date('Ymd-His'); 

$f = fopen("C:/mycsv-{$timestamp}.csv", 'w');

// Headers    
fputcsv($f, array('Item No', 'Qty'));

while($row = mysql_fetch_row($result))
{
    fputcsv($f, $row);
}
fclose($f);