我已经阅读了许多与此错误相关的答案。但是,没有问题(或答案)是关于CodeIgniter的数据库 Activity 查询类应在应返回FALSE时返回FALSE(因为发生错误)。它所做的只是将查询错误打印到application/logs
中的错误日志文件中并退出。
DB_DEBUG值为false。$db['default']['db_debug'] = FALSE;
这是正在执行的查询:
$this->db
->where('col_1_name', 'value')
->where_in('col_2_name', $array)
->delete('table_name');
发生错误是因为$array
是不是问题的空数组BUT-问题是它确实不会返回错误的,而只是将查询错误打印到application/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
最佳答案
根据您的网站设置方式,这不是错误。遇到数据库错误时,该方法不会神奇地返回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
}
关于php - 如果发生数据库查询错误,CodeIgniter 3不会返回false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64280884/