【问题标题】:CodeIgniter - continue on SQL error?CodeIgniter - 继续 SQL 错误?
【发布时间】:2010-12-25 23:44:11
【问题描述】:

基本上我有一个表,其中有几列标记为唯一。我有一个脚本,它使用如下命令将一堆值转储到表中:

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

我的脚本经常会尝试插入一行,这会违反其中一列的唯一性。但是,我希望它继续运行,而不是导致脚本因数据库错误而中止,可能会输出一些消息。基本上我正在寻找相当于

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

谢谢!
马拉

【问题讨论】:

  • 啊,try-catch 块的答案发生了什么?

标签: sql database codeigniter


【解决方案1】:

是的,也花了我一段时间,让我很生气:

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

...在config/database.php - 禁用错误页面。

查询运行后,使用它来检查错误:

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

【讨论】:

  • 如果不为空,失败?这对我来说听起来倒退了,还是我误解了 empty() 的工作原理?
  • 哦,抱歉,我应该在评论之前阅读整行内容吧;)非常感谢!
  • 我的代码如下所示: if (empty($this->db->_error_message())) echo "succeed";否则回显“失败”;但页面因“致命错误:无法在写入上下文中使用方法返回值”而失败...
  • 啊,我刚刚检查了 $this->db->_error_message() == '' 广告是否有效 :) 感谢您提供有关如何执行此操作的提示 :)
【解决方案2】:

我知道您已经有了解决方案,但认为这可能对查看此问题的其他人也有用。

让数据库为您完成工作:

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

当您使用 INSERT IGNORE 时,诸如重复键错误之类的事情会变成警告而不是错误,这样您的查询就可以在不中断脚本流程的情况下运行。

然后你可以做一个

SHOW WARNINGS;

在所有查询都运行后查看发生了哪些警告。

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

【讨论】:

  • 这实际上是一个非常好的答案!我将保持我现在的方式,但我肯定会在未来使用它。谢谢:)
  • 很好,我其实更喜欢这个答案。
  • 感谢您的精彩回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
相关资源
最近更新 更多