【问题标题】:CodeIgniter 3 not returning false in case of a DB query errorCodeIgniter 3 在数据库查询错误的情况下不返回 false
【发布时间】:2021-01-24 14:01:56
【问题描述】:

我已经阅读了与我遇到的这个错误相关的许多相关答案。但是,没有任何问题(或答案)是关于 CodeIgniter 的 DB 活动查询类在应该返回 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 是一个空数组,但这不是问题 - 问题在于它确实 不返回 false 并且只是 将查询错误打印到错误日志应用程序/日志/ 中的文件。如果发生错误,它应该返回 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

【问题讨论】:

    标签: php codeigniter error-handling codeigniter-3 codeigniter-database


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。但是,文档(以及关于 SO 的许多其他接受和更新的答案)说它确实在失败时返回 false。 codeigniter.com/userguide3/database/…
    • "根据您的网站设置方式,这不是错误。" -> 这是否意味着该函数不会根据站点的配置返回 FALSE?如果是这样,您能否澄清一下它取决于什么配置?
    • 你能帮我解决这个问题吗?似乎这个问题的话题不是那么受欢迎,甚至没有吸引太多的观点,更不用说答案/cmets了。任何更多的澄清将不胜感激。具体来说,CodeIgniter 文档是否错误?如果没有,那为什么不返回FALSE
    猜你喜欢
    • 2012-02-07
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多