2011-12-08 20 views
2

是否可以将csv文件插入到表中并指示查询始终忽略csv文件中的第一行。用户将上传文件,但第一行将是列标题,所以我需要查询忽略第一行。我的脚本看起来像这样的时刻:mysql从csv插入表 - 删除第一行

<?php 
include 'datalogin.php'; 

     move_uploaded_file($_FILES["fileCSV"]["tmp_name"], 
     "quiz/" . $_FILES["fileCSV"]["name"]); 

    $objCSV = fopen("quiz/".$_FILES["fileCSV"]["name"], "r"); 
     while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) { 
     $strSQL = "INSERT INTO ex_question1 "; 
     $strSQL .="(id,tn,qnr,qtype,pic,question,option1,option2,option3,option4) "; 
     $strSQL .="VALUES "; 
     $strSQL .="('".$objArr[0]."','".$objArr[1]."','".$objArr[2]."','".$objArr[3]."','".$objArr[4]."','".$objArr[5]."','".$objArr[6]."','".$objArr[7]."','".$objArr[8]."','".$objArr[9]."') "; 
     $objQuery = mysql_query($strSQL); 
    } 
    fclose($objCSV); 

    echo "Import completed."; 
?> 
+2

您可能需要调查LOAD DATA INFILE http://dev.mysql.com/doc/refman/5.1/en/load-data.html – liquorvicar

回答

3

一旦进入循环之前要获取fgetcsv($objCSV, 1000, ",")

$objCSV = fopen("quiz/".$_FILES["fileCSV"]["name"], "r"); 
fgetcsv($objCSV, 1000, ","); // skip first row 
while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) { 
    $strSQL = "INSERT INTO ex_question1 "; 
    $strSQL .="(id,tn,qnr,qtype,pic,question,option1,option2,option3,option4) "; 
    $strSQL .="VALUES "; 
    $strSQL .="('".$objArr[0]."','".$objArr[1]."','".$objArr[2]."','".$objArr[3]."','".$objArr[4]."','".$objArr[5]."','".$objArr[6]."','".$objArr[7]."','".$objArr[8]."','".$objArr[9]."') "; 
    $objQuery = mysql_query($strSQL); 
} 
fclose($objCSV); 

NB。你的代码容易出现SQL注入,请正确地跳出你的输入变量或使用预准备语句!

+0

+ 1评论第一行是有意跳过的 – nickb

2

设想一下,哪怕LOAD DATA命令和IGNORE选项

http://dev.mysql.com/doc/refman/5.1/en/load-data.html