【问题标题】:Code Igniter catch errors on inserting data (Active Record)Code Igniter 在插入数据时捕获错误(Active Record)
【发布时间】:2011-11-20 15:30:07
【问题描述】:

我正在使用以下代码将数据插入到我的数据库中:

$this->db->set('event_id', $event_id);
...
$this->db->set('creator_id', $creator_id);

$this->db->insert('event');

如何确保流程成功并向用户显示确认消息,否则显示错误消息?

【问题讨论】:

  • var_dump($this->db->insert('event')); 的输出是什么?

标签: php database activerecord error-handling codeigniter-2


【解决方案1】:

嗯,IIRC 如果成功,该方法将返回 true,因此您可以使用简单的方法

if($this->db->insert('event'))
{
  echo 'Row succesfully inserted!';
}

否则,您可能总是算上affected rows

//....
$this->db->insert('event');
if($this->db->affected_rows() > 0)
{
  echo 'row succesfully inserted';
}

更新评论后:

我相信您的三个 insert_batch() 位于三个不同的表上,因此应该对每个表进行检查。无论如何,让我感到困惑的是这次检查的原因。查询不会随机失败:可能他们应该永远失败,当他们失败时,你会通过错误(记录或显示)知道。

【讨论】:

  • 在那之后我有两个 insert_batch($array),在做另一个之前我是否必须测试每个插入?或者我可以只测试它们3个,即if($this->db->insert('event') && $this->db->insert_batch($arr1) && $this->db->insert_batch($arr2)){...}
  • 如果您对不同的表使用多个不同的插入,则更好的技术是使用事务。如果一个或多个数据库查询失败,这些可以回滚。有关详细信息,请参阅ellislab.com/codeigniter/user-guide/database/transactions.html 这将消除“应该对每个都进行检查”的所有努力,并且会产生更清洁的解决方案。提出这个问题时,可能 CI 中的事务不可用。
【解决方案2】:

“如果您需要获取最后发生的错误,error() 方法将返回一个包含其代码和消息的数组。” https://www.codeigniter.com/userguide3/database/queries.html

$insert = $this->db->insert('event');

             if(!$insert){

                $error = $this->db->error(); // Has keys 'code' and 'message'
                echo "<BR><BR>";
                print_r($error);
                echo "<BR><BR>";
            }

            echo "Error contact the database admin.";
            die();

        }else{

            echo "SUCCESSFULLY INSERTED ITEM";
            return TRUE;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2015-07-03
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多