PHP导入CSV文件 public function export_in_shebei_csv(){ //导入csv表 //p($_FILES); $filename = $_FILES['file']['tmp_name']; //接收上传的文件 if (empty ($filename)) {return '请选择要导入的CSV文件!'; } $handle = fopen($
public function export_in_shebei_csv(){ //导入csv表 //p($_FILES); $filename = $_FILES['file']['tmp_name']; //接收上传的文件 if (empty ($filename)) {return '请选择要导入的CSV文件!'; } $handle = fopen($filename, 'r'); //p($_FILES); $result = $this->input_csv($handle); //调用方法解析csv,返回 fclose($handle); //关闭指针 //p($result); if(count($result)<1){return '没有任何数据!';} //批量更新方法:replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y'); $sql="replace into shebei ".$result['tit']." values ".$result['vStr']; //echo $sql; Db::execute($sql); go(__ROOT__.'/jk'); } public function input_csv($handle){ $out = array (); //第1行是标题,标题是字段的注释,要换成字段名,但第一行必须读取,让指针下移一行。 $lsarr=fgetcsv($handle, 10000);//读取第1行中的第1个值以获取其字符集(一维索引数组) //p($lsarr); $encode = mb_detect_encoding($lsarr[0], array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));//检测当前字符集 //$sqlstr="select COLUMN_NAME,column_comment from INFORMATION_SCHEMA.Columns where table_name='shebei' and table_schema='viedonet'"; //是一个二维数组,一维索引,二维关联 $sqlstr="select COLUMN_NAME from INFORMATION_SCHEMA.Columns where table_name='shebei' and table_schema='viedonet'"; $tit=Db::query($sqlstr);//返回的$tit是字段名数组,一维索引,二维关联 if(count($lsarr) != count($tit))return $out;//如果导入表中的字段数量与数据表中的字段数量不一致则中止导入 unset($lsarr);//清除临时数组 $intWord='id,kind_id,part_id';//手工指定的,是数据类型的字段名,不在此内的字段全用引号引起 $intWordArr=array();//用来记录int类型的字段顺序 //取得标题字符串, $title=''; foreach ($tit as $k => $v) { $title.=$v['COLUMN_NAME'].','; if(preg_match('/'.$v['COLUMN_NAME'].'/', $intWord)){ $intWordArr[]=true; }else{ $intWordArr[]=false; } } $title='('.preg_replace('/,$/', '', $title).')'; unset($tit);//清除临时数组 //循环读取每一行数据组成数组 $vStr=''; while ($data = fgetcsv($handle, 10000)) { if($data[0]=='')continue;//如果没有ID值则跳过本次循环,读下一行。 //将每行数据用一个括号包起,每个括号间用逗号分隔。字符串要使用引号! $lsstr=''; foreach ($data as $k => $v) { if($intWordArr[$k]){ $lsstr.=iconv($encode, 'UTF-8', trim($v)).',';//数据字段,不加引号 }else{ $lsstr.='"'.iconv($encode, 'UTF-8', trim($v)).'",';//非数据字段,加引号 } } $lsstr='('.preg_replace('/,$/', '', $lsstr).'),';//删除最后一个逗号 $vStr.=$lsstr; } $vStr=preg_replace('/,$/', '', $vStr);//删除最后一个逗号 $out['tit']=$title; $out['vStr']=$vStr; return $out; }