2014-12-15 10 views
-2

구독자 목록을 데이터베이스에 가져 오는 다음과 같은 기능이 있는데 구독자 목록이 500 개 미만이지만 500 개가 넘는 레코드가 브라우저보기 페이지보다 많지만 모든 구독자 목록은 얻을 수 있습니다. 끼워 넣다.php에서 웹 페이지를 사용할 수 없음

다음은 내 수입 코드입니다 : 내가 가진 필드를 지워졌 있도록

function import_csv($csvfile,$databasetable,$uid) { 
    $CI =& get_instance(); 
    $CI->session->unset_userdata('csv_import'); 

    if(!file_exists($csvfile)) { 
     $CI->session->set_flashdata('error','File not found. Make sure you specified the correct path.\n'); 
     return false; 
    } 

    $file = fopen($csvfile,"r"); 

    if(!$file) { 
     $CI->session->set_flashdata('error','Error opening data file.'); 
     return false; 
    } 

    $size = filesize($csvfile); 

    if(!$size) { 
     $CI->session->set_flashdata('error','File is empty.'); 
     return false; 
    } 

    $i=1; 
    $queries=""; 
    $insert_count=0; 
    while($row=fgetcsv($file)) { 
    $row[]=date('Y-m-d h:i:s'); 
    $row[]='while list'; 
    $row[]=$uid; 
     $linemysql = implode("','",$row); 
    $linemysql="'".$linemysql."'"; 
     $query = "insert into ".$databasetable." 
     (`name`, `lname`, `mobile`, `gender`, `dob`, `email`, `city`, `pin`, `address`, `marital_status`, `anniversary_date`,`added_on`,`status`,`uid`) 
     values($linemysql);"; 

     $queries.=$query; 
     if(count($row) == 14 && $row[0]!='' && strlen($row[2]) == 10 && is_numeric($row[2])) { 
      if($CI->db->query($query)) { 
       $insert_count++; 
         $value=$CI->session->userdata('csv_import'); 
         if($value=='') { 
          $value=$CI->db->insert_id(); 
         } 
         else { 
          $value.=','.$CI->db->insert_id(); 
         } 
         $CI->session->set_userdata('csv_import',$value); 
      } 
     } 
     $i++; 
    } 
    $CI->session->set_flashdata('success',$insert_count.' Subscriber added to your account'); 
    return true; 
} 
+0

흠, 여기서 뭐하고있는거야? 500 행을 삽입하기 위해 500 개의 쿼리를 실행 중입니다 ... CSV 파일에 500 개의 행이 있다면 ... 조금 지나치게 길어요.로드하는 데 시간이 너무 오래 걸리므로 웹 사이트에서 오류가 발생할 수 있습니다. – Tosfera

+0

그래서 import csv를위한 솔루션은 무엇입니까? –

+0

방대한 쿼리를 한 번에 만들어야합니다. 내가 한 가지 예를 들어 보겠다. – Tosfera

답변

0
$query = "insert into ".$databasetable." (`name`, `lname`, `mobile`, `gender`, `dob`, `email`, `city`, `pin`, `address`, `marital_status`, `anniversary_date`,`added_on`,`status`,`uid`) VALUES "; 
while ($row = fgetcsv($file)) { 
    query = query . " (". $row [0] .", ". .. .", ". .. .") "; 
} 
$CI->db->query ($query); 

이 하나 개의 거대한 쿼리를 만들거야, 내가 CSV에서 설치를 모르는 '..', 당신은 거기에 오른쪽 $ row []를 추가해야합니다. 루프가 끝나면 쿼리가 실행됩니다. 그냥 당신의 스크립트에 적합하게하십시오. 거기에 쓰레기 코드가 많이 있었으므로 라이브 웹 사이트에서 사용하기 전에 청소해야합니다. ^^

관련 문제