2011-12-08 44 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