2009-12-12 30 views
9

Về cơ bản tôi có một bảng với một vài cột được đánh dấu là Độc đáo. Tôi có một kịch bản mà bãi một loạt các giá trị vào bảng với một lệnh như thế này:CodeIgniter - tiếp tục lỗi SQL?

$this->db->query("INSERT INTO `table` (`col1`, `col2`, `col3`) VALUES (`val1`, `val2`, `val3`)"); 

Mỗi thường như vậy kịch bản của tôi sẽ cố gắng để chèn một hàng mà sẽ vi phạm sự độc đáo của một trong các cột. Tuy nhiên, thay vì gây ra kịch bản để hủy bỏ với một lỗi cơ sở dữ liệu, tôi muốn nó tiếp tục, có thể xuất ra một thông điệp nhỏ. Về cơ bản, tôi đang tìm số người viết mã tương đương

mysql_query("INSERT blah blah blah") or print("fail"); 

Cảm ơn!
Mala

+0

Có gì xảy ra với câu trả lời bằng khối try-catch không? – Mala

Trả lời

19

Yeah, đã cho tôi một thời gian quá và khó chịu địa ngục ra khỏi tôi:

$db['default']['db_debug'] = FALSE; 

... trong config/database.php - vô hiệu hóa các trang lỗi.

Sau một truy vấn chạy, sử dụng để kiểm tra xem có một lỗi:

if (!empty($this->db->_error_message())) { 
    echo "FAIL"; 
} 
+0

Nếu nó KHÔNG trống, thất bại? Điều đó nghe ngược lại với tôi, hoặc tôi hiểu lầm cách trống rỗng() hoạt động? – Mala

+0

oh xin lỗi tôi có lẽ nên đọc toàn bộ dòng trước khi bình luận huh;) Cảm ơn một bó! – Mala

+0

mã của tôi trông giống như sau: nếu (trống ($ this-> db -> _ error_message())) \t echo "success"; else \t echo "không thành công"; nhưng trang không thành công với "Lỗi nghiêm trọng: Không thể sử dụng giá trị trả về của phương thức trong ngữ cảnh viết" ... – Mala

8

Tôi biết bạn đã có một giải pháp, nhưng nghĩ này có thể có ích cho những người khác xem câu hỏi này là tốt.

Hãy để cho cơ sở dữ liệu làm việc cho bạn:

$this->db->query("INSERT IGNORE INTO `table` (`col1`, `col2`, `col3`) VALUES (`val1`, `val2`, `val3`)"); 

Khi bạn sử dụng INSERT bỏ qua, mọi thứ như lỗi khóa trùng lặp trở thành cảnh báo thay vì sai sót, cho phép truy vấn của bạn chạy mà không làm gián đoạn dòng chảy của kịch bản của bạn.

Sau đó, bạn có thể làm một

SHOW WARNINGS; 

sau khi tất cả các truy vấn đã chạy để xem những gì cảnh báo xảy ra.

http://dev.mysql.com/doc/refman/5.1/en/insert.html

+0

Đó thực sự là một câu trả lời thực sự tốt! Tôi sẽ giữ cho tôi cách nó là cho bây giờ, nhưng tôi chắc chắn sẽ sử dụng điều này trong tương lai. Cảm ơn :) – Mala

+0

Tốt, tôi thực sự thích câu trả lời này. <3 – TFennis

+0

Cảm ơn câu trả lời tuyệt vời! – Iyas

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