Codeigniter查询构建器类:如何正确处理可能的意外错误?

时间:2019-05-03 17:12:48

标签: php codeigniter error-handling orm

使用Nodejs后,我习惯了各种基于Promise的api,这些API会在出现某些错误的情况下引发异常/错误。

在Codeigniter和Laravel中,我都看到查询的所有示例都“假设”一切“都可以”:没有try-catch或任何其他形式的错误处理。

例如,我看到CI的“插入”方法成功则返回true,失败则返回false。尽管如此,我所见过的示例都没有对操作使用任何if / else布尔检查。 Laravel也是如此,这显然是一个更加现代和专业的框架。

我现在所做的是,对于返回布尔值的每个查询,手动检查“ true”或“ false”,但是问题是某些方法返回了其他类型,例如“ insert_batch”方法,其返回类型表示为“混合”。

有人可以阐明这个问题吗?其他人会采取什么方法来确保由于错误的数据库错误处理而不会导致任何问题?

CI文档中相关部分的链接: https://www.codeigniter.com/user_guide/database/query_builder.html?highlight=query%20builder

1 个答案:

答案 0 :(得分:3)

未正确记录“读”查询get()get_where()。它说返回是CI_DB_result,但它也可以返回FALSE。我总是使用这种模式(或类似的模式)检查“读取”方法的返回。

$query = $this->db->get();
return $query !== FALSE ? $query->result() : NULL;

主要是要知道$query不是FALSE,然后再尝试在其上运行方法。

例如,对于“写入”查询,只需返回查询生成器方法的结果即可,例如

return $this->db->insert('mytable', $data);

自然地,此退货的接收者需要注意。

下一行代码可以返回以下任意一项:TRUEFALSECI_DB_result对象。

$this->db->query('YOUR QUERY HERE');

query()的完整定义是

DB_driver::query($sql, $binds = FALSE, $return_object = NULL);

调整对$sql字符串请求的退货检查。

一旦确定了查询语句的语法,以后的问题通常与错误的输入数据有关。我通常花更多的时间检查查询输入数据而不是输出。像这样的事情:这里实际上有值吗?数据类型正确吗?在预期范围内吗?垃圾入-垃圾出。