将CSV导入MYSQL但忽略标题行

时间:2012-01-15 12:47:01

标签: php mysql csv import

  

可能重复:
  Read a file from line X to line Y?

我知道之前已经介绍过,但是我发现的所有答案都与LOAD DATA INFILE方法有关,该方法使用IGNORE 1 LINES来忽略标题,我已经尝试使用下面的代码,但它只是抛出一个错误。

    <?php
    //database connect info here

    //check for file upload
    if(isset($_FILES['csv_file']) && is_uploaded_file($_FILES['csv_file']['tmp_name'])){

        //upload directory
        $upload_dir = "./csv";

        //create file name
        $file_path = $upload_dir . $_FILES['csv_file']['name'];

        //move uploaded file to upload dir
        if (!move_uploaded_file($_FILES['csv_file']['tmp_name'], $file_path)) {

            //error moving upload file
            echo "Error moving file upload";

        }

        //open the csv file for reading
        $handle = fopen($file_path, 'r');


        while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {

            //Access field data in $data array ex.
                        $salutation = $data[0];
                        $leadname = $data[1];                           
                        $businessname = $data[2];
                        $address = $data[3];
                        $town = $data[4];
                        $county = $data[5];
                        $postcode = $data[6];
                        $phone = $data[7];                          
                        $email = $data[8];
                        $gasoiluser = $data[9];
                        $dervuser = $data[10];
                        $kerouser = $data[11];
                        $annualconsgasoil = $data[12];
                        $annualconsderv = $data[13];
                        $annualconskero = $data[14];
                        $gasoilmargin = $data[15];
                        $dervmargin = $data[16];
                        $keromargin = $data[17];
                        $fueldetails = $data[18];   
                        $lubesdetails = $data[19];  
                        $othernotes = $data[20];                            
                        $sentletterday = $data[21];
                        $sentlettermonth = $data[22];
                        $sentletteryear = $data[23];
                        $sentpostcardday = $data[24];
                        $sentpostcardmonth = $data[25];
                        $sentpostcardyear = $data[26];                          
                        $sentquoteday = $data[27];
                        $sentquotemonth = $data[28];
                        $sentquoteyear = $data[29];
                        $lastvisitedday = $data[30];
                        $lastvisitedmonth = $data[31];
                        $lastvisitedyear = $data[32];
                        $receivegasoilmailinglist = $data[33];
                        $receivedervmailinglist = $data[34];
                        $receivekeromailinglist = $data[35];
                        $gasoilmailinglist = $data[36];
                        $dervmailinglist = $data[37];
                        $keromailinglist = $data[38];   
                        $mailtype = $data[39];                      
                        $createdby = $data[40];

            echo 'Import Successful : ';
            echo $leadname;
            echo '<br/>';

            //Use data to insert into db
            $sql = sprintf("INSERT IGNORE hqfjt_chronoforms_data_addupdatelead (salutation,leadname,businessname,address,town,county,postcode,phone,email,gasoiluser,dervuser,kerouser,annualconsgasoil,annualconsderv,annualconskero,gasoilmargin,dervmargin,keromargin,fueldetails,lubesdetails,othernotes,sentletterday,sentlettermonth,sentletteryear,sentpostcardday,sentpostcardmonth,sentpostcardyear,sentquoteday,sentquotemonth,sentquoteyear,lastvisitedday,lastvisitedmonth,lastvisitedyear,receivegasoilmailinglist,receivedervmailinglist,receivekeromailinglist,gasoilmailinglist,dervmailinglist,keromailinglist,mailtype,createdby) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
                        mysql_real_escape_string($salutation),
                        mysql_real_escape_string($leadname),                            
                        mysql_real_escape_string($businessname),
                        mysql_real_escape_string($address),
                        mysql_real_escape_string($town),
                        mysql_real_escape_string($county),
                        mysql_real_escape_string($postcode),
                        mysql_real_escape_string($phone),                           
                        mysql_real_escape_string($email),
                        mysql_real_escape_string($gasoiluser),
                        mysql_real_escape_string($dervuser),
                        mysql_real_escape_string($kerouser),
                        mysql_real_escape_string($annualconsgasoil),
                        mysql_real_escape_string($annualconsderv),
                        mysql_real_escape_string($annualconskero),
                        mysql_real_escape_string($gasoilmargin),
                        mysql_real_escape_string($dervmargin),
                        mysql_real_escape_string($keromargin),
                        mysql_real_escape_string($fueldetails), 
                        mysql_real_escape_string($lubesdetails),    
                        mysql_real_escape_string($othernotes),                          
                        mysql_real_escape_string($sentletterday),
                        mysql_real_escape_string($sentlettermonth),
                        mysql_real_escape_string($sentletteryear),
                        mysql_real_escape_string($sentpostcardday),
                        mysql_real_escape_string($sentpostcardmonth),
                        mysql_real_escape_string($sentpostcardyear),                            
                        mysql_real_escape_string($sentquoteday),
                        mysql_real_escape_string($sentquotemonth),
                        mysql_real_escape_string($sentquoteyear),
                        mysql_real_escape_string($lastvisitedday),
                        mysql_real_escape_string($lastvisitedmonth),
                        mysql_real_escape_string($lastvisitedyear),
                        mysql_real_escape_string($mailtype),
                        mysql_real_escape_string($receivegasoilmailinglist),
                        mysql_real_escape_string($receivedervmailinglist),
                        mysql_real_escape_string($receivekeromailinglist),
                        mysql_real_escape_string($gasoilmailinglist),
                        mysql_real_escape_string($dervmailinglist),
                        mysql_real_escape_string($keromailinglist),                         
                        mysql_real_escape_string($createdby)
                        );
            mysql_query($sql) or (mysql_query("ROLLBACK") and die(mysql_error() . " - $sql"));


        }


        //delete csv file
        unlink($file_path);
    }
    ?>

1 个答案:

答案 0 :(得分:9)

通过在循环之前从文件中读取它来手动跳过一行:

//open the csv file for reading
$handle = fopen($file_path, 'r');

// read the first line and ignore it
fgets($handle); 

while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
  // do your thing
}