php读取含有3w条以上数据的csv文件,并选择性将相应字段的数据导入至mysql

1.数据库建议好数据表,确认具有哪些字段和字段对应的类型;
2.连接数据库的页面(database.php)
<?php
$Server="localhost";
$User="root";
$pw="****";//密码
$db="****";//数据库名
$con=mysqli_connect($Server,$User,$pw,$db);
// 检查连接
if (!$con)
{
die("连接错误: " . mysqli_connect_error());
}
else
echo "数据库连接成功"."<br>";
//设置客户端和连接字符集
mysqli_set_charset($con,"utf8");
?>


3.前端上传csv文件的页面(load.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>

<form action='load.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="submit" name="submit" value="确认上传文件" >
</form>
</body>
</html>

4.后端处理上传文件并导入至数据库的页面(load.php)
<?php
header("content-type:text/html;charset=utf-8");
include("database.php");
echo "亲,文件过大,导入数据库需要一会儿,请耐心等候!";
$n=$_FILES["file"]["tmp_name"];
$row = 0;//行指标
$result=1;//最后根据此值查看数据是否全部导入
if (($handle = fopen("$n", "r")) !== FALSE)
{
$sql="insert into user(company_name,saler,sector,last_time) values('";
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$flag=1;//用于查看第15列的值是否为空,若为空此行就不执行sql语句
$row++;
if ($row == 1)
continue;
$num = count($data);
// 这里会依次输出每行当中每个单元格的数据
for ($i=0; $i<$num; $i++)//字段标号是从0(对应A列)开始的。
{
$Name=iconv('gb2312','utf-8',$data[$i]);
if($i==1||$i==2||$i==3||$i==15)//只选取1,2,3,15列的数据插入到数据库
{
if($i==15)
{
if($Name==null)
{
$sql=$sql.'null'."')";$flag=0;break;//last_time为空,就不执行此sql语句
}
else
{
$sql=$sql.$Name."')";break;//到第15列后,后面列的数据都不需要插入,所以sql语句填写完毕;
}
}
else{
$sql=$sql.$Name."','";
}

}
else
{
continue;
}
}
if($flag==0)//第15列字段值为空,不执行sql语句
{
$sql="insert into user(company_name,saler,sector,last_time) values('";
continue;//跳出此次循环
}
$line=$row-1;//真正的行号,用于提示第几行数据插入情况
if(!mysqli_query($con,$sql))
{
echo "第".$line."行插入数据库失败";
$result=0;
break;
}
else
{
echo "第".$line."行插入数据库成功"."<br>";
}
$sql="insert into user(company_name,saler,sector,last_time) values('";
}
}
fclose($handle);
if($result==1)//数据全部导入成功
{
echo"<script>alert('文件已成功导入数据库!');</script>";
echo"<script>location.href='account.html'</script>";
exit;
}
else
{
echo"<script>alert('文件数据导入失败');</script>";
echo"<script>location.href='account.html'</script>";
exit;
}
?>
5.结果


缺点:运行有点慢,我后期看下是否有更快的方法。

亲测有效。有何疑问可以私我。(要敢于挑战自己,遇到问题不要退缩。)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章