2011-12-08 33 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 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 
関連する問題