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;
}
