2012-01-15 5 views
0

가능한 중복 :
Read a file from line X to line Y?가져 오기 CSV하지만 헤더 행을 무시

나는이 이전에 덮여있다,하지만 내가 찾은 모든 답변을 LOAD 데이터에 관련된 알고

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

당신이 프로그래밍 방식으로 카운터 변수와 'CONTINUE'는 0, 예를 들어, 추가 수행하려는 경우 첫 번째 줄. 하지만 왜 'load data infile'을 사용할 수있을 때 프로그램 적으로 이것을하고 싶습니까? – Gordon

+0

그렇다면 왜 'LOAD DATA INFILE'이 당신의 요구에 맞지 않는다고 생각합니까? – newtover

+0

또한 최신 mysqli 또는 PDO로 전환하고 준비된 명령문을 사용하여 프로세스 속도를 높이는 것이 좋습니다. – Gordon

답변

8

그냥 루프 전에 파일을 읽어 수동으로 한 줄을 건너 :

//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

관련 문제