【问题标题】:Codeigniter : $this->db->_error_message() message returns NULLCodeigniter:$this->db->_error_message() 消息返回 NULL
【发布时间】:2016-01-30 17:53:25
【问题描述】:

我有一个查询,它给了我完美的结果。但我需要将 mysql 错误(如果有)发送到 UI。所以特意把列名改成blah_text

$qID = 13
$this->db->select('id AS optionID, blah_text AS option, is_correct AS isCorrect');
$oQuery = $this->db->get_where('xq_options', array('question_id' => $qID));
if($oQuery){
    $qnaArray['options'] = $oQuery->result_array();
}
else{
    //$qnaArray['error'] = $this->db->_error_message();
    echo "Error: " .  $this->db->_error_message();
}

所有获取都是Error:

我尝试使用原生 mysqli 函数 mysqli_error($oQuery); 但相同的 O/P

注意:我在数据库配置文件中设置了'db_debug' => FALSE。如果我将其设置为 TRUE,我会收到 CI 错误消息

Error Number: 1054 Unknown column 'blah_text' in 'field list' SELECT id AS optionID, blah_text AS option, is_correct AS isCorrect

如何捕获变量中的 sql 错误并将其发送到 UI,例如 $qnaArray['error']

编辑:'db_debug' 当前设置为 FALSE。我希望将错误消息设置在变量中。没有在屏幕上回显。

【问题讨论】:

  • 如果您在使用'db_debug'=> TRUE 时遇到错误。有什么问题?
  • @SagarKhatri 我在 CI 样式的页面上遇到错误。我需要将它作为 webservice json 发送到 UI,以便我可以正确显示。
  • 哪些客户端将使用您的 WebService? Android、iPhone 还是通过 JS 在前端?
  • @SagarKhatri iPad 和 JS
  • 我认为剥离标签并获取消息文本就足够了。你可以使用$qnaArray['error'] = strip_tags($this->db->_error_message());

标签: php mysql codeigniter mysqli


【解决方案1】:

使用

$e = $this->db->error(); // Gets the last error that has occured
$num = $e['code'];
$mess = $e['message'];

https://www.codeigniter.com/userguide3/database/queries.html 中提供的信息搜索“处理错误”

【讨论】:

  • 实际上文档说; “error() 方法将返回一个包含其代码和消息的 array”。所以,获取代码和消息的方式是$error['code'] $error['message']
【解决方案2】:
if (!$this->db->simple_query('SELECT `id` FROM `customers`')) {
   $error = $this->db->error();
}

$data['db_error_message'] = 'Error [' . $error['code'] . '] ' . $error['message'];

来自https://www.codeigniter.com/userguide3/database/queries.html#handling-errors页面上的文档

在您看来,这段代码会打印出这样的消息;

数据库错误消息:错误 [1146] 表“mydb.customers”不存在

同样,您的代码打印出相同的结果。

$qID = 13;
$this->db->select('id AS `optionID`, blah_text AS `option`, is_correct AS `isCorrect`');
$oQuery = $this->db->get_where('xq_options', array('question_id' => $qID));

if (!$oQuery) {
   $err = $this->db->error();
}
$data['err_message'] = 'Error [' . $err['code'] . '] ' . $err['message'];

打印; 错误消息:错误 [1146] 表“mydb.xq_options”不存在

我没有创建表,所以我的消息是“未找到表”错误消息,而不是“未找到列”。

我想这就是你想要的。

【讨论】:

    【解决方案3】:

    改为:

    if($oQuery)
    {
       $qnaArray['options'] = $oQuery->result_array();
    }
    else{
    //$qnaArray['error'] = $this->db->_error_message();
    echo "Error: " .  $this->db->_error_message();
    }  
    

    试试这个:

    if($oQuery->num_rows()>0)
    {
       $qnaArray['options'] = $oQuery->result_array();
    }
    else{
    //$qnaArray['error'] = $this->db->_error_message();
    echo "Error: " .  $this->db->_error_message();
    }    
    

    【讨论】:

    • 我得到了这个:Fatal error: Call to a member function num_rows() on boolean 但是一个 CI 错误消息。不是来自$this->db->_error_message();
    【解决方案4】:

    $this->db->_error_message();在选择数据时不会执行。

    使用这个

    $qID = '13';
    $query = $this->db->query(
                "SELECT id AS optionID, blah_text AS option, is_correct AS isCorrect 
                 FROM table_name WHERE xq_options = $qID");
    $result = $query->result_array();
    $count = count($result);
    
    if (!empty($count)) {
        return $result;
    }
    else{
        echo "No Data Found";
    }
    

    【讨论】:

    • 我可以改用$query->num_rows()。那不是重点。我需要查看 MySQL 错误消息。 Unknown column 'blah_text' in 'field list' SELECT id AS optionID, blah_text AS option, is_correct AS isCorrect
    • 使用我的查询并检查
    • 您的查询有效。但我要么得到结果,要么得到“未找到数据”,我需要的是错误消息。
    • Unknown column 'blah_text' in 'field list' SELECT id AS optionID, blah_text AS option, is_correct AS isCorrect
    • @eNeMetcH 啊在里面使用这个 else $this->db->_error_message();
    猜你喜欢
    • 2012-07-23
    • 1970-01-01
    • 2017-04-10
    • 2016-12-29
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多