2011-12-08 3 views
2

csv 파일을 테이블에 삽입하고 csv 파일의 첫 번째 행을 항상 무시하도록 쿼리를 지시 할 수 있습니다. 사용자는 파일을 업로드하지만 첫 번째 행은 열 제목이므로 첫 번째 행을 무시하는 쿼리가 필요합니다. 내 스크립트는 순간 다음과 같습니다csv에서 테이블에 mysql 삽입 - 첫 번째 행을 삭제

<?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 데이터 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 
관련 문제