我遇到了一个问题,我在代码点火器中调用了 n 个查询对象上的 result_array()
函数:
$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() 函数的最后一个示例中,数组的大小再次为零。
在此问题上的任何指导将不胜感激。我需要在阅读result_array()
后可以访问list_fields()
函数。
下面是第一个代码块的结果:
Array
(
[0] => site_id
[1] => institution
[2] => caller
[3] => call_complete
[4] => call_details
[5] => id
[6] => timestamp
)
Array
(
)
谢谢你的帮助
这似乎是数据库驱动程序中的一个错误。例如,在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);
执行此操作的正确方法实际上是在数据库驱动程序中修复它。请参阅此拉取请求:-)