將數據庫中的文件導出成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('插入失敗,請重試!'); } }