簡體   English   中英

通過PHP將數據從MySQL導出到Excel(csv)

[英]Exporting data from MySQL to Excel (csv) via PHP

我將使用PHP將SQL中的數據導出到Excel(csv)。 我可以將所有數據從SQL導出到Excel,但這是未知的日語。 現在,我可以解決它; 但是另一個問題是有關SQL中的每一行都將導出到Excel中的一列中。

示例(SQL中的數據)

ccode    country
US       United State
UK       United Kingdom
FR       France
KO       Korea
JP       東京

導出到Excel(csv)之后

    A                  
1   ccode,country
2   US,United State
3   UK,United Kingdom
4   FR,France
5   KO,Korea
6   JP,東京

這是我的代碼

<?php

header("Content-type: text/csv; charset=UTF-8");
header('Content-Disposition: attachment; filename=Export.csv');
//connection
$con = mysql_connect('localhost', 'root', '');
if(!$con){
    echo "Error connection";
}
//select db
$select_db = mysql_select_db('country', $con);
if(!$select_db){
    echo "Error to select database";
}
mysql_set_charset("utf8", $con);

//Mysql query to get records from datanbase
$user_query = mysql_query('SELECT * FROM countries');

//While loop to fetch the records
$contents = "ccode,country\n";
while($row = mysql_fetch_array($user_query))
{
    $contents.=$row['ccode'].",";
    $contents.=$row['country']."\n";
}

$contents_final = chr(255).chr(254).mb_convert_encoding($contents, "UTF-16LE","UTF-8");
print $contents_final;

?>

這是我導出到Excel(csv)后想要的

    A          B 
1   ccode      country
2   US         United State
3   UK         United Kingdom
4   FR         France
5   KO         Korea
6   JP         東京

誰能幫我解決這個問題? 感謝您的幫助!

預先感謝。

您在做什么已經是正確的。 在Excel中導入csv文件時,請指定分隔符為逗號。 或者,可以使用制表符代替逗號作為分隔符。

實際上,您不應該像手動那樣從事手動創建CSV的工作。 考慮使用fputcsv()執行此操作:

//While loop to fetch the records
fputcsv('php://output', array('ccode','country'));
while($row = mysql_fetch_array($user_query, MYSQL_NUM)) {
    array_walk($row, function(&$item) {
          $item = mb_convert_encoding($item, "UTF-16LE","UTF-8");
    }
    fputcsv('php://output', $row); 
}

請注意,我也在每個單獨的字段值上執行編碼步驟。

使用此方法的好處是,它將在必要時正確地包圍所有字段,以防止某些值破壞CSV格式。 例如,如果您的數據庫值之一包含,您的方法將會中斷,而使用適當的csv創建機制則可以毫無問題地進行處理。

這種方法的另一個好處是,如果您擁有大量數據,則將使用更少的內存,因為您一次只能在存儲器中保存一行數據(在輸出並移至下一個數據之前)行)。

使用\\ t作為$ content變量以獲取Excel工作表不同列中的數據

您將需要用;分隔列; 而不是, 名稱“逗號分隔的值”在這里有點誤導。 所以你會寫:

while($row = mysql_fetch_array($user_query))
{
    $contents.=$row['ccode'].";";
    $contents.=$row['country']."\n";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM