PHP导出MySQL数据到Excel的方法介绍

经常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如 PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存使用上限。这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。

<?php
// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename=&quot;user.csv&quot;');
header('Cache-Control: max-age=0');</p>

<p>// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
$sql = 'select * from tbl where ……';
$stmt = $db-&gt;query($sql);</p>

<p>// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');</p>

<p>// 输出Excel列名信息
$head = array('姓名', '性别', '年龄', 'Email', '电话', '……');
foreach ($head as $i =&gt; $v) {
    // CSV的Excel支持GBK编码,一定要转换,否则乱码
    $head[$i] = iconv('utf-8', 'gbk', $v);
}</p>

<p>// 将数据通过fputcsv写到文件句柄
fputcsv($fp, $head);</p>

<p>// 计数器
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;</p>

<p>// 逐行取出数据,不浪费内存
while ($row = $stmt-&gt;fetch(Zend<em>Db::FETCH</em>NUM)) {</p>

<pre><code>$cnt ++;
if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
    ob_flush();
    flush();
    $cnt = 0;
}

foreach ($row as $i =&amp;gt; $v) {
    $row[$i] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $row);
</code></pre>

<p>}

简单易用,非常节省内存,不依赖第三方类库。

时间: 2024-05-09 21:30:58

PHP导出MySQL数据到Excel的方法介绍的相关文章

PHP导出MySQL数据到Excel文件

// 输出Excel文件头,可把user.csv换成你要的文件名   header('Content-Type: application/vnd.ms-excel');   header('Content-Disposition: attachment;filename="user.csv"');   header('Cache-Control: max-age=0');   // 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可   $sql = '

PHP实现导出MySQL数据到Excel文件

// 输出Excel文件头,可把user.csv换成你要的文件名     header('Content-Type: application/vnd.ms-excel');     header('Content-Disposition: attachment;filename="user.csv"');     header('Cache-Control: max-age=0');     // 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可  

PHP导出MySQL数据到Excel文件(fputcsv)

这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件. 复制代码 代码如下: // 输出Excel文件头,可把user.csv换成你要的文件名 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="user.csv"'); header('Cache-Control: max-age=0'); // 从数据库中获取

PHP导出MySQL数据到Excel文件(fputcsv)_php技巧

这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件. 复制代码 代码如下: // 输出Excel文件头,可把user.csv换成你要的文件名 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="user.csv"'); header('Cache-Control: max-age=0'); // 从数据库中获取

php使用指定编码导出mysql数据到csv文件的方法

 本文实例讲述了php使用指定编码导出mysql数据到csv文件的方法.分享给大家供大家参考.具体实现方法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 <?php /* * PH

C#使用oledb导出数据到excel的方法_C#教程

本文实例讲述了C#使用oledb导出数据到excel的方法.分享给大家供大家参考,具体如下: 现在做应用的一半都会碰到数据导出的问题,导出到word阿,导出到excel啊,还有其他的什么.当然导出的类型中还是以ms office的居多.最近在做数据的转换,也碰到这个导出的问题,当然幸运的是不用碰word,这样涉及到就只有xml,csv,tsv和最"痛苦"的excel了. 最开始的想法是xml+xslt,搞定全部,但是有一个问题就是excel只有在xp版本之后支持xml,我不能强制的要求

php使用指定编码导出mysql数据到csv文件的方法_php技巧

本文实例讲述了php使用指定编码导出mysql数据到csv文件的方法.分享给大家供大家参考.具体实现方法如下: <?php /* * PHP code to export MySQL data to CSV * * Sends the result of a MySQL query as a CSV file for download * Easy to convert to UTF-8. */ /* * establish database connection */ $conn = mysq

linux下导入、导出mysql数据库命令

参考地址:linux下导入.导出mysql数据库命令   一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构:mysqldump -u用户名 -p 数据库名 > 数据库名.sql#/usr/local/mysql/bin/mysqldump -uroot -p abc > abc.sql敲回车后会提示输入密码 2.只导出表结构mysqldump -u用户名 -p -d 数据库名 > 数据库名.sql#/usr/local/mysql/

导出大数据量excel,用POI

问题描述 导出大数据量excel,用POI 需要导出的数据量可能非常大(超过10W条),而且要照顾到没装07Excel的机器,不能用SXSSFworkbook.鉴于一个sheet页最多65000多条记录,那么大数据就需要多个sheet页.由于导出前要先查数据库,是应该一次查出所有数据然后导出还是分次查询?每次查询65000条数据? 解决方案 这么大的文件,excel 2003未必能打开.建议分页存入多个excel文件. 解决方案二: 看速度和效率了,分次是不是速度还快点