2011-01-21 14 views
5

Próbuję uruchomić dość dużą liczbę aktualizacji/wstawień w tabeli przy użyciu multi_query. Istnieją ~ 14.000 zapytań Total, ale funkcja jest wykonywana tylko ~ 480, a następnie zatrzymuje się bez błędów i PHP kontynuuje skrypt poza poniższej Snip:Dlaczego funkcja mysqli :: multi_query zatrzymuje się po określonej liczbie wierszy?

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

Jak długo (w sekundach) zapytanie jest uruchamiane, zanim osiągnie około 480 wierszy? Czy CI rejestruje wszelkie błędy w pliku dziennika? – joelcox

+0

@Xoc zapytanie działa przez mniej niż sekundę, zanim ulegnie awarii. – Erik

Odpowiedz

0

mysqli :: multi_query tylko zwraca false, jeżeli pierwsza instrukcja nie powiedzie się. Aby uzyskać błędy z innych zapytań w swoim zestawie, musisz najpierw wywołać mysqli :: next_result(), co właśnie robi twoja funkcja while().

Jednak ponieważ mysqli :: next_result() zwraca wartość false w przypadku niepowodzenia, spowoduje to zakończenie pętli i wyświetlenie komunikatu "Importuj ukończone". Prawdopodobnie musisz sprawdzić błąd, zanim ustawisz komunikat o powodzeniu, i tylko wtedy, gdy błąd jest pusty, zwróć sukces.

Poniższe informacje powinny co najmniej pokazać błąd, jeśli wystąpił później w instrukcji.

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

W rzeczywistości nie ma błędów w samych zapytaniach. Przechodzę zawartość pliku sql i działa poprawnie za pomocą wiersza poleceń lub narzędzia GUI. – Erik

Powiązane problemy