CodeIgniter 3 在数据库查询错误的情况下不返回 false

CodeIgniter 3 not returning false in case of a DB query error

我已经阅读了与我遇到的这个错误相关的许多相关答案。但是,没有问题(或答案)是关于 CodeIgniter 的数据库活动查询 class returning 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 是一个空数组,但这不是问题 - 问题是它 而不是 return false 而只是 将查询错误打印到 applications/logs/ 中的错误日志文件。如果出现错误,它应该是 return false,不是吗?否则怎么会有人发现数据库错误?

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

注意:我试过 DB_DEBUG = TRUE 和 FALSE,两种情况下都发生同样的事情。

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

根据您网站的设置方式,这不是错误。当遇到数据库错误时,该方法不会神奇地 return 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
}