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
语句尝试过,但 delete
、update
等的行为完全相同
$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
}
我已经阅读了与我遇到的这个错误相关的许多相关答案。但是,没有问题(或答案)是关于 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
语句尝试过,但 delete
、update
等的行为完全相同
$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
}