-1

我已经阅读了与我遇到的这个错误相关的许多相关答案。但是,没有任何问题(或答案)是关于 CodeIgniter 的 DB 活动查询类在它应该返回 FALSE 时(因为发生错误)。它所做的只是将查询错误打印到错误日志文件中application/logs并退出。

DB_DEBUG 值为假。

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

这是正在执行的查询:

$this->db
    ->where('col_1_name', 'value')
    ->where_in('col_2_name', $array)
    ->delete('table_name');

发生错误是因为$array是一个空数组但不是问题 - 问题是它不返回 false并且只是将查询错误打印到 applications/logs/ 中的错误日志文件。如果发生错误,它应该返回 false ,不是吗?否则任何人将如何捕获数据库错误?

将该查询的错误写入日志文件后,它就退出该过程。我已经通过log_messages()在上述方法之前和之后添加来验证这一点。

注意:我已经尝试过DB_DEBUG= TRUE 和 FALSE 并且在这两种情况下都会发生同样的事情。

注意:CodeIgniter 3 的文档说该delete()方法(以及许多其他 DB 方法)在失败时返回 FALSE。https://www.codeigniter.com/userguide3/database/query_builder.html#CI_DB_query_builder::delete

4

1 回答 1

2

根据您网站的设置方式,这不是错误。false遇到数据库错误时,该方法不会神奇地返回。

如果db_debug设置为true,CI3 会在遇到数据库错误时停止执行,将错误输出到屏幕并记录下来,但您没有机会评估错误。

但是,db_debug设置为false,您可以在运行查询后立即检查 的值,您可以$this->db->error()在其中检查查询是否运行正常。

我用一个语句尝试了这个,但是对于,等select行为是完全相同的。deleteupdate

$query = $this->db->get();
log_message('debug', "Err: ".json_encode($this->db->error()));

这记录:

DEBUG - 2020-10-09 12:09:44 --> Err: {"code":0,"message":""}

当没有错误时,并且

 Err: {"code":1064,"message":"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 4"}

当有错误时。

$this->db->error()实际上是一个数组,因此您可以检查类似的内容,而不是仅仅记录它

$err = $this->db->error();
if ($err['code'] !== 0)
{
  // do something about the error or handle the excepcion
}

else
{
  // query ran OK, keep the method going
}
于 2020-10-09T15:17:43.080 回答