跳过CSV文件数据的第一行
问题描述:
我想将CSV数据发送到我的mysql数据库,但我想跳过数据的第一行,因为它包含标题,我经历了一些帖子在这里,但他们没有帮助任何想法我如何在下面的代码中执行此操作?跳过CSV文件数据的第一行
//if ($_FILES['csv']['size'] > 0) {
if (!empty($_FILES['csv']['size']) && $_FILES['csv']['size'] > 0) {
//get the csv file
$file = $_FILES['csv']['tmp_name'];
$handle = fopen($file,"r");
//loop through the csv file and insert into database
$num = count($data);
do {
if ($data[0]) {
mysql_query("INSERT INTO mbet_football (TIME, TEAMS, HOME, DRAW, AWAY) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."',
'".addslashes($data[4])."'
)
");
}
} while ($data = fgetcsv($handle,1000,",","'"));
//
//redirect
header('Location: mbetf.php?success=1'); die;
}
?>
答
我有点改变了你的代码,但它应该工作:
<?php
//if ($_FILES['csv']['size'] > 0) {
if (!empty($_FILES['csv']['size']) && $_FILES['csv']['size'] > 0) {
//get the csv file
$file = $_FILES['csv']['tmp_name'];
$row = 0;
if (($handle = fopen($file, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$row++;
if($row == 1) continue;
if ($data[0]) {
mysql_query("INSERT INTO mbet_football (TIME, TEAMS, HOME, DRAW, AWAY) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."',
'".addslashes($data[4])."'
)
");
}
}
fclose($handle);
}
//redirect
header('Location: mbetf.php?success=1'); die;
}
?>
答
您可以使用布尔标志来跳过第一行。
//loop through the csv file and insert into database
$skipFlag = true;
while($data = fgetcsv($handle,1000,",","'")){
if($skipFlag){
$skipFlag = false;
continue;
}
if ($data[0]) {
mysql_query("INSERT INTO mbet_football (TIME, TEAMS, HOME, DRAW, AWAY) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."',
'".addslashes($data[4])."'
)
");
}
}
旁注:不要使用mysql_*
功能,它们被弃用的PHP 5.5,并且在PHP 7.0完全删除。改为使用mysqli
或pdo
。 And this is why you shouldn't use mysql_*
functions。
答
为什么不只是得到循环之前的第一行?
$headers = fgetcsv($handle, 1000, ",", "'");
//loop through the csv file and insert into database
while($data = fgetcsv($handle, 1000, ",", "'")) {
//code
}
感谢它的工作就像魅力! – Ruckser