通过PHP将数据从MySQL导出到Excel(csv)

我将使用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)

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

任何人都可以帮我解决这个问题吗? 我很感激你的帮助!

预先感谢。

你在做什么已经是正确的。 在Excel中导入csv文件时,请指定分隔符是逗号。 或者,使用制表符作为分隔符代替逗号。

您实际上不应该像您所做的那样手动创buildCSV。 考虑使用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创build机制将会毫无问题地处理这个问题。

这种方法的另外一个好处就是,如果你有大量的数据,这将会占用更less的内存,因为你一次只能在内存中保存一行数据(在你输出数据并移到下一个数据之前行)。

使用\ t作为$ contentvariables来获取Excel表格的不同列中的数据

你需要将你的列与一个; 而不是一个, 。 这个名字“逗号分隔值”在这里有点误导。 所以你会写:

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