使用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
答案 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);
自然地,此退货的接收者需要注意。
下一行代码可以返回以下任意一项:TRUE
,FALSE
或CI_DB_result
对象。
$this->db->query('YOUR QUERY HERE');
query()
的完整定义是
DB_driver::query($sql, $binds = FALSE, $return_object = NULL);
调整对$sql
字符串请求的退货检查。
一旦确定了查询语句的语法,以后的问题通常与错误的输入数据有关。我通常花更多的时间检查查询输入数据而不是输出。像这样的事情:这里实际上有值吗?数据类型正确吗?在预期范围内吗?垃圾入-垃圾出。