將CSV數據導入到數據庫

  1. 將數據庫中的文件導出成csv文件:sql

    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','公司二描述')this

 

3.開始實現數據導入(基於ThinkPHP框架);orm

  (1).HTML頁面源代碼:ip

        <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).控制器: get

//顯示模板
    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('插入失敗,請重試!');         }           }