2011-01-21 29 views
5

Tôi đang cố chạy một số lượng cập nhật/chèn khá lớn trên một bảng bằng multi_query. Có ~ 14.000 truy vấn tổng, nhưng chức năng chỉ thực hiện ~ 480, sau đó nó dừng lại mà không có lỗi và PHP tiếp tục kịch bản vượt quá snip dưới đây:Tại sao mysqli :: multi_query dừng sau một số lượng hàng nhất định?

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

Truy vấn chạy trong bao lâu trước khi đạt đến khoảng 480 hàng? CI có đăng nhập bất kỳ lỗi nào vào tệp nhật ký không? – joelcox

+0

@Xoc truy vấn chạy trong chưa đầy một giây trước khi không thành công. – Erik

Trả lời

0

mysqli :: chỉ multi_query trả về false nếu báo cáo kết quả đầu tiên thất bại. Để nhận được lỗi từ các truy vấn khác trong tập hợp của bạn, bạn cần gọi mysqli :: next_result() trước tiên, đó là những gì bạn làm trong khi() đang thực hiện.

Tuy nhiên, vì mysqli :: next_result() trả về false do lỗi, nó sẽ khiến vòng lặp kết thúc và thông báo 'Nhập hoàn tất' sẽ được hiển thị. Bạn có thể cần phải kiểm tra lỗi trước khi thiết lập thông báo thành công và chỉ khi lỗi bị trống, hãy trả về thành công.

Sau đây ít nhất sẽ hiển thị cho bạn lỗi nếu có lỗi sau trong tuyên bố.

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

Thực ra, không có lỗi nào trong các truy vấn. Tôi đang đi trong nội dung của một tập tin sql và nó chạy tốt thông qua dòng lệnh hoặc công cụ gui. – Erik

Các vấn đề liên quan