数据库导出数据到csv文件导出

csv因为是文本格式,可支持大文件

 

csv :文件, 文本格式, 字段间逗号分隔, 可用excel打开
EXCEL2007之前只能显示6.4W行, 2007之后, 可以支持104W行
 
 
 
/**
* 导出大数据到CSV, 当前页面下载, 弊端,EXCEL最多支持108万行.几百万级的数据读不了
*/

set_time_limit(0);

header ( "Content-type:application/vnd.ms-excel" );
header ( "Content-Disposition:filename=" . iconv ( "UTF-8", "GB18030", "query_user_info" ) . ".csv" );

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

$column_name = array('id','ZONEID','USERID','TIME');//标题

// 将中文标题转换编码,否则乱码
foreach ($column_name as $i => $v) {
$column_name[$i] = iconv('utf-8', 'GB18030', $v);
}
// 将标题名称通过fputcsv写到文件句柄
fputcsv($fp, $column_name);

include_once "database.php";
//总数
//$con = mysqli_connect('127.0.0.1','root','hoolai','Log','3306');
$con = mysqli_connect(DATABASE_HOST,DATABASE_USER,DATABASE_PASS,DB_LOG,DATABASE_PORT);
$con ? '': 'error:'.mysqli_error($con);
$result = mysqli_query($con,"select count(1) as total from LOG_CURRENCY");
$count1 = mysqli_fetch_assoc($result);
$total_export_count = ($count1['total'] > 1000000) ? 1000000 : $count1['total'] ;//总数 小于等于100W



$pre_count = 10000;
for ($i=0;$i<intval($total_export_count/$pre_count)+1;$i++){
$result2 = mysqli_query($con,"select ID,ZONEID,USERID,TIME from LOG_CURRENCY LIMIT ".$i*$pre_count.",$pre_count");
$export_data = array();
// $export_data = mysqli_fetch_all($result2,MYSQLI_ASSOC);//线上环境不支持
while ($arow = mysqli_fetch_assoc($result2)){
     $export_data[] = $arow;
}
// $export_data = $db->getAll($sql." limit ".strval($i*$pre_count).",{$pre_count}");
// dump($export_data);die();

foreach ( $export_data as $item ) {
    $rows = array();
    foreach ( $item as $export_obj){
        $rows[] = iconv('utf-8', 'GB18030', $export_obj);
    }
       fputcsv($fp, $rows);
}

// 将已经写到csv中的数据存储变量销毁,释放内存占用
unset($export_data);
     ob_flush();
    flush();
}


fclose($fp); //每生成一个文件关闭
exit ();

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值