我不熟悉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);
答案 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);