Php 获取多条记录的CSV文件

Php 获取多条记录的CSV文件,php,csv,Php,Csv,我正在csv文件中导出查询结果。代码如下所示: $query = "SELECT DATE(punchdetails.punchin) as punchday,punchdetails.punchin,punchdetails.punchout,employeedetails.employeename FROM punchdetails join(employeedetails) ON punchdetails.employeeid=emp

我正在csv文件中导出查询结果。代码如下所示:

$query = "SELECT DATE(punchdetails.punchin) as punchday,punchdetails.punchin,punchdetails.punchout,employeedetails.employeename
                            FROM punchdetails join(employeedetails) ON punchdetails.employeeid=employeedetails.employeeid 
                            AND punchdetails.employeeid=$employeeid AND DATE(punchdetails.punchin)=$fromdate";

header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
ini_set('display_errors',1);
$private=1;
error_reporting(E_ALL ^ E_NOTICE);
$select_c = mysql_query($query);
while ($row = mysql_fetch_array($select_c))
{
    $intime = strtotime($row['punchin']);
    $mysqlintime = date( 'H:i:a', $intime );
    $outtime = strtotime($row['punchout']);
    $mysqlouttime = date( 'H:i:a', $outtime );
    $result.=$row['employeename'].','.$row['punchday'].','.$mysqlintime.','.$mysqlouttime;
    $result.="\n";
    echo $result;
}       
Sonu,2013-09-26,10:55:am,11:12:am

Sonu,2013-09-26,10:55:am,11:12:am

Kristo,2013-09-26,11:23:am,11:24:am
当我执行查询时,它会正确地返回记录。但当我将查询结果下载为csv文件时,记录会被复制。我得到的csv文件数据如下所示:

$query = "SELECT DATE(punchdetails.punchin) as punchday,punchdetails.punchin,punchdetails.punchout,employeedetails.employeename
                            FROM punchdetails join(employeedetails) ON punchdetails.employeeid=employeedetails.employeeid 
                            AND punchdetails.employeeid=$employeeid AND DATE(punchdetails.punchin)=$fromdate";

header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
ini_set('display_errors',1);
$private=1;
error_reporting(E_ALL ^ E_NOTICE);
$select_c = mysql_query($query);
while ($row = mysql_fetch_array($select_c))
{
    $intime = strtotime($row['punchin']);
    $mysqlintime = date( 'H:i:a', $intime );
    $outtime = strtotime($row['punchout']);
    $mysqlouttime = date( 'H:i:a', $outtime );
    $result.=$row['employeename'].','.$row['punchday'].','.$mysqlintime.','.$mysqlouttime;
    $result.="\n";
    echo $result;
}       
Sonu,2013-09-26,10:55:am,11:12:am

Sonu,2013-09-26,10:55:am,11:12:am

Kristo,2013-09-26,11:23:am,11:24:am
我不明白问题出在哪里。有人能帮我解决这个问题吗?提前谢谢。

我看到问题了

您将
结果与每一行关联,然后进行回显。因此,每次回显-将回显所有以前的结果+当前结果

或者,改变:

$result.=$row['employeename'].','.$row['punchday'].','.$mysqlintime.','.$mysqlouttime;
$result.="\n";
致:


或移动
echo$结果在while循环之外

您需要在while循环之外回显$result:

$result='';
while ($row = mysql_fetch_array($select_c))
{
    $intime = strtotime($row['punchin']);
    $mysqlintime = date( 'H:i:a', $intime );
    $outtime = strtotime($row['punchout']);
    $mysqlouttime = date( 'H:i:a', $outtime );
    $result.=$row['employeename'].','.$row['punchday'].','.$mysqlintime.','.$mysqlouttime;
    $result.="\n";
}     
echo $result;

你会得到每一条记录的副本,还是只是一些?另外,当您运行查询时,您会说它返回了正确的记录-您是如何测试它的?我响应了结果查询并在phpmyadmin中执行。目前,我只有2条满足查询的记录。现在只有第一条记录被复制。旁注:停止使用不推荐的
mysql.*
函数。改用MySQLi或PDO。是的,当我移动echo$result时,它起作用了;在while循环之外。谢谢大家。