php - 代码点火器 3 : Can't catch database error using try catch block

标签 php codeigniter-3

我正在开发一个 api,它处理来自客户端的请求,然后从服务器获取响应(使用 codeigniter 3 开发)并将其转发回客户端。

但是,如果出现任何数据库错误,例如重复 ID 或空值,模型类将无法处理该错误以显示正确的错误消息。我试过 try catch block 但还没有成功。 这是模型:

public function add() {
    try {
        $this->db->trans_start(FALSE);
        $this->db->insert('users', $preparedData);
        $this->db->trans_complete();
        if ($this->db->trans_status() === FALSE) {
            throw new Exception("Database error:");
            return false;
        }
        return TRUE;
    } catch (Exception $e) {
        log_message('error: ',$e->getMessage());
        return;
    }
}

有一件事需要提及,我已将 db_debug 设置为 FALSE。

如有任何帮助,我们将不胜感激。

最佳答案

对于 CI 3,下面的代码获取数据库错误代码错误消息。 db_debug 设置为 FALSE。

public function add() {
    try {
        $this->db->trans_start(FALSE);
        $this->db->insert('users', $preparedData);
        $this->db->trans_complete();

        // documentation at
        // https://www.codeigniter.com/userguide3/database/queries.html#handling-errors
        // says; "the error() method will return an array containing its code and message"
        $db_error = $this->db->error();
        if (!empty($db_error)) {
            throw new Exception('Database error! Error Code [' . $db_error['code'] . '] Error: ' . $db_error['message']);
            return false; // unreachable retrun statement !!!
        }
        return TRUE;
    } catch (Exception $e) {
        // this will not catch DB related errors. But it will include them, because this is more general. 
        log_message('error: ',$e->getMessage());
        return;
    }
}

请参阅 https://www.codeigniter.com/userguide3/database/queries.html#handling-errors 处的文档

If you need to get the last error that has occurred, the error() method will return an array containing its code and message.

我认为它有点不完整,因为它在示例代码中没有显示错误代码和错误消息。

关于php - 代码点火器 3 : Can't catch database error using try catch block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41716175/

相关文章:

PHP从URL获取图像到字节数组并反向

javascript - 我正在尝试在 javascript 循环中发送获取或发布请求,但 .click() 仅处理一次

php - MySQL 从一行中选择数据

php - 使用 codeigniter 将今天的日期与 mysql 表中的日期进行比较

mysql - Codeigniter MySQL 不正确的日期时间插入

php - 如何使用foreach循环从数据库中获取数据?

php - 同时使用 PDO 和 mysqli - 有碰撞风险吗?

php - 返回空字符串或空值是否有更多优势?

php - 电子邮件存在功能与 codeigniter php

php - 如何在codeigniter中判断是否是Ajax请求?