2

我遇到了一个问题,我result_array()从 codeigniter 中调用 n 个查询对象上的函数:

   $this->db->select(array('a','b','c'));

   $query = $this->db->get('basic');
   print_r($query->list_fields());
   $test = $query->result_array();
   print_r($query->list_fields());

当我运行此代码时,或者:

   $query = $this->db->get('basic');
   print_r($query->list_fields());
   print_r($query->list_fields());

或者:

   $query = $this->db->get('basic');
   $test = $query->result_array();
   print_r($query->list_fields());

第二个list_fields()函数总是返回一个大小为 0 的数组,第一个函数返回正确的字段名称列表。

在只有一个 list_fields() 函数的最后一个示例中,数组的大小再次为零。

任何有关此事的指导将不胜感激。我需要在list_fields()阅读result_array().

这是第一块代码的结果:

    Array
    (
        [0] => site_id
        [1] => institution
        [2] => caller
        [3] => call_complete
        [4] => call_details
        [5] => id
        [6] => timestamp
    )
    Array
    (
    )

感谢您的帮助

4

1 回答 1

1

这看起来是数据库驱动程序中的一个错误。例如,在CI_DB_mysqli_result

public function list_fields()
{
    $field_names = array();
    while ($field = $this->result_id->fetch_field())
    {
        $field_names[] = $field->name;
    }

    return $field_names;
}

后续调用将返回array(),因为 while 循环查找所有字段并将指针留在列表末尾。

但是,在结果类中,result_id是公共的,因此您可以使用mysqli_result::field_seek

$query = $this->db->get('basic');
var_dump($query->list_fields());

// this should be called before any call to list_fields()
$query->result_id->field_seek(0);
var_dump($query->list_fields());

但是,这是不好的做法,因为这只适用于 mysqli;对于 mysql,你需要这个:

mysql_field_seek($query->result_id, 0);

对于 mssql:

mssql_field_seek($query->result_id, 0);

正确的方法是在数据库驱动程序中修复它。请参阅此拉取请求:-)

于 2013-01-28T23:14:23.427 回答