2 votes

mysql insert into table from csv - drop first row

Est-il possible d'insérer un fichier csv dans une table et de demander à la requête de toujours ignorer la première ligne du fichier csv. Les utilisateurs téléchargeront des fichiers, mais la première ligne sera constituée des titres des colonnes, et j'ai donc besoin que la requête ignore la première ligne. Mon script ressemble à ceci pour le moment :

<?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.";
?>

3voto

knittl Points 64110

Il suffit d'appeler fgetcsv($objCSV, 1000, ",") une fois avant d'entrer dans la boucle :

 $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. votre code est sujet à des injections SQL, veuillez échapper correctement vos variables d'entrée ou utiliser des instructions préparées !

2voto

Nicola Cossu Points 18168

Considérez même LOAD DATA et IGNORE option

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X