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