2012-01-15 38 views
0

可能重複:
Read a file from line X to line Y?導入CSV到MySQL,但忽略標題行

我知道這之前已經覆蓋,但我已經找到了答案都涉及到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); 
    } 
    ?> 
+0

第一行。但是,爲什麼你想用編程的方式來使用'load data infile'呢? – Gordon 2012-01-15 12:51:35

+0

那你爲什麼覺得'LOAD DATA INFILE'不適合你的需求呢? – newtover 2012-01-15 12:52:01

+0

另外,您可能需要考慮切換到更現代的mysqli或PDO,並使用準備好的語句來加速此過程。 – Gordon 2012-01-15 12:58:51

回答

8

只是跳過手動一行通過循環之前從文件中讀取它:

如果你想這樣做編程方式添加計數器變量和'continue`時其0,例如
//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 
} 
+0

謝謝!,完美的作品。 – user1148760 2012-01-15 13:01:44