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.結果


缺點:運行有點慢,我後期看下是否有更快的方法。

親測有效。有何疑問可以私我。(要敢於挑戰自己,遇到問題不要退縮。)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章