将CSV数据导入到数据库

  1. 将数据库中的文件导出成csv文件:

    select company,currenttime,description from mydata into outfile 'i://1.csv' fields terminated by ','optionally enclosed by ''lines terminated by '/n';

    备注:

    csv(Comma-Separated Values,逗号分隔值),是一种有一定格式(用指定符号分隔)的文本文件(文本文件本来是没有格式的)。

 

2. 一条sql语句可以插入多条记录:

  INSERT INTO mydata(company,currenttime,description) VALUES('公司一','2014-04-07 12:23:34','公司已描述'),('公司二','2014-04-07 12:23:34','公司二描述')

 

3.开始实现数据导入(基于ThinkPHP框架);

  (1).HTML页面源代码:

        <form action="{:U('Index/importData')}"  METHOD="POST"  ENCTYPE="multipart/form-data" >
                <label for="import"><input type="file"  name="summary" /></label>  </br></br></br></br>
                <input type="submit" value="开始导入" />
            </form>

 

(2).控制器: 

//显示模板
    public function index(){
        $this->display();
    }
   
    //数据导入
    public function importData(){
       
        $upload = new \Think\Upload();
        $upload ->exts=array('csv','xls','xlsx');//暂时支持了Excel等格式,为了测试
        $upload ->rootPath='./Uploads/';//设置文件上传的根路径
        $upload ->savePath="";//设置文件上传子路径
       
        $info=$upload->upload();
       
        //上传错误提示错误信息
        if(!$info) $this->error($upload->getError());

        //开始读取对应的文件
        $file=$upload->rootPath.$upload->savePath.$info['summary']['savepath'].$info['summary']['savename'];
       
        //如果文件存在,开始拆分拆分数据,进行导入操作
        if(!file_exists($file)){
            $this->error("上传的文件丢失,请重新上传!");
        }
       
        //文件存在,开始导入
        $str_content = file_get_contents($file); //将所有的记录获取成一个字符串
        $arr_content = explode('/n', $str_content); //将字符串形式的所有记录拆分成数组
        $sum_content = count($arr_content) - 1; //380

        $sql = "INSERT INTO mydata(company,currenttime,description) VALUES";
        foreach ($arr_content as $k1 => $v1) {
            if ($k1 < $sum_content) {
                $arr_list = explode(',', $v1);
                $sum_list = count($arr_list); //3

                $sql .= "(";
                foreach ($arr_list as $k2 => $v2) { //字段
                    if ($k2 < $sum_list - 1) {
                        $sql .= "'" . $v2 . "'" . ',';
                    } else {
                        $sql .= "'" . $v2 . "'";
                    }
                }
                $sql .= "),";
            }
        }

        $model = new \Think\Model(); //
        $result = $model->execute(rtrim($sql, ","));

        $spend_time=round(microtime(true)-$GLOBALS['_beginTime'],4);
    
        if ($result) {
            $this->success("成功插入".$reuslt."条数据,共耗时".$spend_time."s");
        } else {
            $this->error('插入失败,请重试!');
        }
     
    }

 

转载于:https://my.oschina.net/u/1771585/blog/661438

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值