2011-01-21 17 views
5

Multi_query kullanarak bir tabloya oldukça fazla miktarda güncelleme/insert çalıştırmaya çalışıyorum. Orada ~ 14.000 sorgular toplamı, ancak işlevi yalnızca 480 ~ çalıştırır, o zaman hatasız durur ve PHP aşağıda kelepir ötesinde senaryoyu devam ediyor: İlk deyimi başarısız olursaNeden mysqli :: multi_query belirli bir satırdan sonra duruyor?

if($this->db->conn_id->multi_query($sql)){ 
    do{ 
     // echo $line.' '.mysqli_sqlstate($this->db->conn_id).'<br>'; 
    }while($this->db->conn_id->more_results() && $this->db->conn_id->next_result()); 
    $this->message->set('Import complete.','success',TRUE); 
}else{ 
    $this->message->set('Import could not be completed. '.mysqli_error($this->db->conn_id),'error',TRUE); 
} 
+1

Sorgu yaklaşık 480 satıra ulaşmadan önce ne kadar sürer (saniye cinsinden)? CI günlük dosyasına herhangi bir hata kaydeder mi? – joelcox

+0

@Xoc, sorgulamadan önce saniyeden daha kısa bir süre için çalışıyor. – Erik

cevap

0

mysqli :: multi_query sadece false döndürür. Setinizdeki diğer sorgulardaki hataları almak için, önce mysqli :: next_result() öğesini çağırmanız gerekir; Ancak, mysqli :: next_result() işlevi hata durumunda false değerini döndürdüğü için, döngünün bitmesine ve 'Import complete' iletisinin görüntülenmesine neden olur. Başarı mesajını ayarlamadan önce bir hatayı kontrol etmeniz ve sadece hatanın boş olması durumunda başarıyı geri döndürmeniz gerekir.

Aşağıdakiler, daha sonra ifadede bir tane varsa, hatayı size göstermelidir.

if($this->db->conn_id->multi_query($sql)){ 
    do{ 
     // echo $line.' '.mysqli_sqlstate($this->db->conn_id).'<br>'; 
    } while($this->db->conn_id->more_results() && $this->db->conn_id->next_result()); 

    if ($error = mysqli_error($this->db->conn_id)) { 
     $this->message->set('Import could not be completed. ' . $error,'error',TRUE); 
    } else $this->message->set('Import complete.','success',TRUE); 
} else { 
    $this->message->set('Import could not be completed. '.mysqli_error($this->db->conn_id),'error',TRUE); 
} 
+0

Aslında, sorgularda kendilerinde hata yok. Bir sql dosyasının içeriğini geçiyorum ve komut satırı veya gui aracıyla iyi çalışıyor. – Erik

İlgili konular