将MySQL的结果集创建为CSV字符串

时间:2012-07-25 22:43:19

标签: php mysql csv

如何使用mysql_fetch_array / mysql_fetch_row结果创建一个csv文件,其中每行记录为csv,下一条记录为新行。

我试过了:

$query = "SELECT * FROM myTable DESC LIMIT 10";

$result = mysql_query($query, $conn);
$resultRows = mysql_num_rows($result);

if($resultRows < 1) {
    return array('query' => $query, 'NumberOfRows' => $resultRows, 'status' => 'failure');
};

$rowResult = mysql_fetch_array($result);
//var_dump($rowResult);exit;
foreach($rowResult as $row){

    $resultSet = $row['firstname'];
    $resultSet .= ',' . $row['lastname'];
    $resultSet .= ',' . $row['email'];
    $resultSet .= ',' . $row['phone'];
    $resultSet .= ',' . ($row['address1']);
    $resultSet .= '\n';
    //var_dump($resultSet);exit;
}

3 个答案:

答案 0 :(得分:2)

我认为换行符必须是双引号。

$resultSet .= "\n";

由于长度原因,可能只是从代码中省略了,但请确保在foreach之后回显$ resultSet。

答案 1 :(得分:1)

如果您希望将文件下载为CSV,则可以包含以下标题

header("Content-type: application/x-msdownload");
header("Content-Disposition: attachment; filename=extraction.csv");
header("Pragma: no-cache");
header("Expires: 0");

然后对于csv部分,您将使用以下内容:

echo "FirstName,LastName,Email,Phone,Address\r\n"; //header
while($row = mysql_fetch_array($result)){
  echo "\"$row[firstname]\",\"$row[lastname]\",\"$row[email]\",\"$row[phone]\",\"$row[address]\"\r\n";
} 

但是如果你只是想创建一个文件,你可以使用以下内容:

$fp = fopen('file.csv', 'w');

while($row = mysql_fetch_array($result)){
   fputcsv($fp, $row);
}

fclose($fp);

答案 2 :(得分:0)

这是一个很好的资源:http://www.codehive.net/PHP-Array-to-CSV-1.html

用法:

$csv_data = array_to_scv($array, false);
print_r($csv_data);