2009-12-12 96 views
9

基本上我有一張桌子,上面有幾列標記爲「唯一」的列。我有一個腳本,轉儲一堆值到表中,像這樣的命令:CodeIgniter - 繼續SQL錯誤?

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

幾乎每隔一段時間,我的腳本將嘗試插入一行,因此違反了其中一列的唯一性。但是,不要讓腳本因數據庫錯誤而中止,我希望它繼續,可能會輸出一條消息。基本上我正在尋找代碼相當於

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

謝謝!
麻辣

+0

啊無論發生了什麼與try-catch塊的答案? – Mala 2009-12-13 07:45:35

回答

19

呀,我花了一段太和煩惱的地獄了我:

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

...在config/database.php - 禁用錯誤頁面。

經過查詢運行,以此來檢查錯誤:

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

如果不是空的,失敗?這聽起來倒退了,還是我誤解了empty()的工作方式? – Mala 2009-12-13 09:02:00

+0

哦對不起,我應該在評論之前閱讀整行;)謝謝一堆! – Mala 2009-12-13 09:03:17

+0

我的代碼如下所示: if(empty($ this-> db - > _ error_message())) \t echo「succeed」; else \t echo「fail」; 但頁面失敗,出現「致命錯誤:無法在寫入上下文中使用方法返回值」... – Mala 2009-12-13 09:07:06

8

我知道你已經有一個解決方案,但認爲這可能是爲別人看這個問題也很有用。

讓數據庫做的工作適合你:

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

當您使用INSERT忽略,像重複鍵錯誤變成警告,而不是錯誤,這讓你的查詢,而無需中斷您的腳本的流程運行。

然後,您可以做一個

SHOW WARNINGS; 

後所有查詢都跑,看看發生了什麼警告。

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

+0

這實際上是一個非常好的答案!我會保持現在的狀態,但我一定會在將來使用它。謝謝:) – Mala 2009-12-19 07:30:21

+0

不錯,我其實更喜歡這個答案。 <3 – TFennis 2011-11-26 10:56:37

+0

感謝您的好評! – Iyas 2012-12-20 01:06:02