1

可能重复:
PHP 将 Excel 导出到特定路径?

我不太熟悉将 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);
4

2 回答 2

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');
于 2012-09-07T21:36:12.993 回答
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);
于 2012-09-07T21:40:45.957 回答