2009-12-12 97 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