导出中的Php重复输出

时间:2012-06-23 01:01:23

标签: php mysql export-to-csv

我有一段时间遇到这个问题,我在这里发布了这个问题,但我没有任何反馈意见。我正在尝试导出一个查询,我这样做,只是字段,它们是重复的。怎么会这样?

以下是代码:

$fh = fopen('hostess_query4.csv', 'w');
$result1 = mysql_query("SELECT ".$username." FROM hostess");
if ( !$result1 ) { echo mysql_error(); }
while ($row = mysql_fetch_array($result1)) {
    $last = end($row);
    foreach ($row as $item) {
        fputcsv($fh, $row, ',');
        if ($item != $last)
            fwrite($fh, "\t");
        }
    fwrite($fh, "\n");
    }
}

fclose($fh);

3 个答案:

答案 0 :(得分:0)

使用mysql_fetch_assoc()而不是mysql_fetch_array 文档:
http://php.net/mysql_fetch_array
http://php.net/mysql_fetch_assoc

或者使用mysql_fetch_array,并将第二个可选参数设置为MYSQL_ASSOC。

新代码:

$fh = fopen('hostess_query4.csv', 'w');
$result1 = mysql_query("SELECT ".$username." FROM hostess");
if ( !$result1 ) { echo mysql_error(); }
while ($row = mysql_fetch_assoc($result1)) {
    $last = end($row);
    foreach ($row as $item) {
        fputcsv($fh, $row, ',');
        if ($item != $last)
            fwrite($fh, "\t");
        }
    fwrite($fh, "\n");
    }
}

fclose($fh);

答案 1 :(得分:0)

您将两种不同的方法混为一谈。

以下方法可行。它使用implode合并您的行。

$fh = fopen('hostess_query4.csv', 'w');

$result1 = mysql_query("SELECT ".$username." FROM hostess");

if ( !$result1 ) { echo mysql_error(); }

while ($row = mysql_fetch_assoc($result1)) {
    fwrite($fh, implode(",", $row)."\n");
}

fclose($fh);

您遇到问题的原因是mysql_fetch_array将返回0递增和关联数组。例如:

Array
(
    [0] => 1
    [ID] => 1
    [1] => Mike
    [NAME] => Mike
    [2] => 22
    [Age] => 22
) 

因此,当您导出它时,它将导出重复项。将其更改为mysql_fetch_assoc或mysql_fetch_object,您将只有一组值。

答案 2 :(得分:0)

你可以试试这个。

$last = end(mysql_fetch_array($result1)); // this will return the last element in $result1
while (list($username) = mysql_fetch_array($result1)) {        
    fputcsv($fh, $username, ',');
    if ($username!= $last)
        fwrite($fh, "\t");
    }
    fwrite($fh, "\n");
}