2012-02-14 38 views
7

Những gì tôi muốn làm là một cái gì đó như thế này:Xử lý với các phím trùng lặp trong CodeIgniter mysql chèn

function registerUser($username, $password){ 

$this->db->insert('tblUsers', array('username'=>$username, 'password'=>md5($password))); 
if($this->db->_error_number()==1062){ 
    return "DUPLICATE"; 
} 
return true; 

} 

Tuy nhiên, tại thời điểm này nếu có một khóa trùng lặp sau đó nó không cho tôi có được để các bit _error_number(). hiển thị của nó một lỗi như thế này:

enter image description here

Làm thế nào để ngăn chặn CodeIgniter từ bailing với một lỗi và đi qua các số lỗi với tôi để đối phó với một cách thích hợp?

Cảm ơn

Trả lời

12

Bạn có thể truy cập vào các thông báo lỗi MySQL trong CodeIgniter sử dụng:

$this->db->_error_message(); 

Rõ ràng DB_DEBUG cần phải được thiết lập để sai trong tập tin cơ sở dữ liệu cấu hình:

Đảm bảo DB_DEBUG được thiết lập đến FALSE trong tệp cấu hình cơ sở dữ liệu, hoặc thực thi sẽ dừng lại khi một lỗi mysql xảy ra (nó không bị ném, nó sẽ thoát khỏi ph p thông dịch viên)

Link: http://codeigniter.com/forums/viewthread/79950/#413830

+0

Cảm ơn, tôi biết rằng, tôi đang sử dụng _error_number() để có được số lỗi trong đoạn code trên. Tuy nhiên, nó không đến đó, mương của nó trước khi tay, và in một lỗi. –

+0

Xem giải pháp đã sửa đổi của tôi. Lưu ý rằng bạn sẽ không còn có thể nhìn thấy thông báo lỗi MySQL mà không sử dụng _error_message()/_ error_number() – citizenen

+0

ah tuyệt vời, được tìm thấy tốt, tôi không thể tìm thấy ở bất cứ đâu. :) –

8

Góp ý:

$orig_db_debug = $this->db->db_debug; 

$this->db->db_debug = FALSE; 

RUN QUERY HERE 

$this->db->db_debug = $orig_db_debug; 
+2

cách tiếp cận tốt mà không thay đổi cấu hình –

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