侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php实现CSV文件导入和导出

php  /  管理员 发布于 7年前   148

项目开发中,很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件,那么具体该如何实现呢?本文将使用PHP并结合mysql,实现了CSV格式数据的导入和导出功能。
我们先准备mysql数据表,假设项目中有一张记录学生信息的表student,并有id,name,sex,age分别记录学生的姓名、性别、年龄等信息。

CREATE TABLE `student` (  `id` int(11) NOT NULL auto_increment,  `name` varchar(50) NOT NULL,  `sex` varchar(10) NOT NULL,  `age` smallint(3) NOT NULL default '0',  PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

我们还需要一个html交互页面,放置导入表单和导出按钮。

请选择要导入的CSV文件:

选择好本地csv文件后,点击导入,提交到do.php?action=import处理,而点击导出按钮则请求地址do.php?action=export进行数据导出处理。

1.导入CSV
do.php需要根据get过来的参数,分别处理导入和导出过程,php结构如下:

include_once ("connect.php"); //连接数据库 $action = $_GET['action']; if ($action == 'import') //导入CSV {  //导入处理 }elseif($action=='export') //导出CSV {  //导出处理 } 

导入CSV处理流程:校验csv文件合法性(本文忽略)->打开读入并解析csv文件中的字段->循环获取各字段值->批量添加到数据表中->完成。

if ($action == 'import') { //导入CSV  $filename = $_FILES['file']['tmp_name'];  if(emptyempty ($filename))  {   echo '请选择要导入的CSV文件!';   exit;  }  $handle = fopen($filename, 'r');  $result = input_csv($handle); //解析csv  $len_result = count($result);  if($len_result==0)  {   echo '没有任何数据!';   exit;  }  for($i = 1; $i < $len_result; $i++) //循环获取各字段值  {   $name = iconv('gb2312', 'utf-8', $result[$i][0]); //中文转码   $sex = iconv('gb2312', 'utf-8', $result[$i][1]);   $age = $result[$i][2];   $data_values .= "('$name','$sex','$age'),";  }  $data_values = substr($data_values,0,-1); //去掉最后一个逗号  fclose($handle); //关闭指针  $query = mysql_query("insert into student (name,sex,age) values $data_values"); //批量插入数据表中  if($query)  {   echo '导入成功!';  }else{   echo '导入失败!';  } } 

注意php自带的fgetcsv函数可以轻松处理csv,使用该函数可以从文件指针中读入一行并解析CSV字段。下面的函数将csv文件字段解析并以数组的形式返回。

function input_csv($handle) {  $out = array ();  $n = 0;  while ($data = fgetcsv($handle, 10000))  {   $num = count($data);   for ($i = 0; $i < $num; $i++)   {    $out[$n][$i] = $data[$i];   }   $n++;  }  return $out; } 

此外在导入到数据库中时,我们采用的是批量插入而不是一条条插入的,因此在构建SQL语句时,要稍作处理,见代码。

2.导出CSV
我们知道csv文件是由逗号分割符组成的纯文本文件,你可以用excel打开,效果跟xls表个一样。
导出CSV处理流程:读取学生信息表->循环记录构建逗号分隔的字段信息->设置header信息->导出文件(下载)到本地

... }elseif ($action=='export') //导出CSV {  $result = mysql_query("select * from student order by id asc");  $str = "姓名,性别,年龄\n";  $str = iconv('utf-8','gb2312',$str);  while($row=mysql_fetch_array($result))  {   $name = iconv('utf-8','gb2312',$row['name']); //中文转码   $sex = iconv('utf-8','gb2312',$row['sex']);   $str .= $name.",".$sex.",".$row['age']."\n"; //用引文逗号分开  }  $filename = date('Ymd').'.csv'; //设置文件名  export_csv($filename,$str); //导出 } 

要将数据导出到本地即下在,需要修改header信息,代码如下:

function export_csv($filename,$data) {  header("Content-type:text/csv");  header("Content-Disposition:attachment;filename=".$filename);  header('Cache-Control:must-revalidate,post-check=0,pre-check=0');  header('Expires:0');  header('Pragma:public');  echo $data; } 

注意导入和导出的过程中,因为我们使用的是统一UTF-8编码,遇到中文字符一定要记得转码,否则可能会出现中文乱码的情况。

以上就是本文的全部内容,希望本文所述对大家的php程序设计有所帮助。

您可能感兴趣的文章:

  • php使用指定编码导出mysql数据到csv文件的方法
  • php将csv文件导入到mysql数据库的方法
  • PHP导出MySQL数据到Excel文件(fputcsv)
  • PHP实现CSV文件的导入和导出类
  • 详解PHP导入导出CSV文件
  • php导入csv文件碰到乱码问题的解决方法
  • php中数据的批量导入(csv文件)
  • php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
  • PHP上传Excel文件导入数据到MySQL数据库示例
  • 使用phpexcel类实现excel导入mysql数据库功能(实例代码)
  • php导入excel文件到mysql数据库的方法
  • PHP导入Excel到MySQL的方法
  • PHP编程实现csv文件导入mysql数据库的方法


  • 上一条:
    php解析url并得到url中的参数及获取url参数的四种方式
    下一条:
    PHP错误Warning:mysql_query()解决方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客