Codeigniter3:如何从 db->insert 获取错误或成功信息?

Posted

技术标签:

【中文标题】Codeigniter3:如何从 db->insert 获取错误或成功信息?【英文标题】:Codeigniter3: How to get error or success info from db->insert? 【发布时间】:2016-07-19 09:53:04 【问题描述】:

我想从$CI->db->insert(...) 获取成功和失败的返回信息。

我试图简单地捕捉返回并回显它并打印它,但都没有给我任何有用的东西;我已经尝试过 $CI->db->display_errors() (尽管我实际上并没有在CI docs 中找到它)。

$return = $this->db->insert( "some_table" , $table_data ) ;

print_r( $return  ) ; // 
// OR
print  ( $this->db->display_errors() ) ;

$CI->db->insert(...) 是否提供检查成功/失败的方法?


更新:

在 CI3 中 ...

$this->db->_error_message() 生成错误: Fatal error: Call to undefined method CI_DB_mysqli_driver::_error_message()(带或不带前导下划线).

$this->db->display_errors() 生成错误:Fatal error: Call to undefined method CI_DB_mysqli_driver::display_errors()

$this->db->insert_id()生成0(不管插入成功还是失败)

【问题讨论】:

看到这个网址:codeigniter.com/user_guide/database/… 还有这个***.com/questions/7843406/… 使用 if ( $this->db->_error_message() ) echo $this->db->_error_message() ; @AldoZumaran 这些方法已在 CodeIgniter 版本 3 中删除。 【参考方案1】:

$this->db->_error_message() 已弃用,因此请尝试使用以下函数。

$error = $this->db->error(); 

【讨论】:

【参考方案2】:

有两种方法可以为我提供有意义的信息,尽管我在 CI3 文档中没有看到该信息是确定性,因此我认为这是一个weak-ish 解决方案:


一个...

$return = $this->db->insert( "some_table" , $lvl_data ) 返回...

// on SUCCESS: 1 ......... which indicates the boolean TRUE, not the number 1
// on FAILURE: nothing ... which indicates the boolean FALSe

但是,我从文档中不知道这是否始终可以确保。

请注意:这将在 failure 时生成一个无法捕获的格式化 CI 错误消息,除非您使用影响 $this->db->db_debug ... 请参阅下面的工作示例以了解用法。


B ...

$this->db->error() 返回...

// on SUCCESS: Array ( [code] => 0    [message] => ) 
// on FAILURE: Array ( [code] => 1054 [message] => Unknown column 'some_bad_column_name' in 'field list' ) 

但是,我不确定(基于CI3 doc)[code]=>0 一定等于success


A+B,带有 $this->db->db_debug ...

因此,我认为将这两个信息结合起来是松散的指示性:

$db_debug           = $this->db->db_debug ; //save setting
$this->db->db_debug = FALSE               ; //disable debugging for queries

$return = $this->db->insert( "some_table" , $lvl_data ) ;
$error  = $this->db->error ()                           ;
if ( $error['code'] === 0  &&  $return === true )
   // almost surely SUCCESS
  

$this->db->db_debug = $db_debug           ; //set it back

【讨论】:

以上是关于Codeigniter3:如何从 db->insert 获取错误或成功信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 codeigniter 3 中使用 PDO

在 Codeigniter 3.0.6 中插入当前日期时间

codeIgniter3 学习笔记八(session)

Codeigniter 3 MySQLi 安全数据库连接

Codeigniter 3.1.6 - 如何从 url 中删除 index.php

codeIgniter3 学习笔记五(表单验证)