-
将数据库中的文件导出成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('插入失败,请重试!'); } }