2014-12-15 8 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 строк ... если у вас есть 500 строк в вашем файле csv ... это немного перебор. Веб-сайт может дать вам ошибку, потому что загрузка занимает слишком много времени. – Tosfera

+0

так что такое решение для импорта csv? –

+0

Вы должны создать 1 массивный запрос и сразу же запустить его. Позвольте привести пример. – 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 [] там сами. По завершении цикла он вызовет запрос. Просто сделайте это подходящим для вашего скрипта. Там также было много кода мусора, не забудьте очистить его, прежде чем использовать его на веб-сайте в прямом эфире ^^