如果表为空,则 CodeIgniter result_array() 出现布尔错误
Posted
技术标签:
【中文标题】如果表为空,则 CodeIgniter result_array() 出现布尔错误【英文标题】:CodeIgniter result_array() on boolean error if the table is empty 【发布时间】:2016-03-05 20:18:51 【问题描述】:我的Carros_model.php
中有这个功能,用于带来最后的插入并将它们显示在仪表板中:
public function select_all($limit = 3)
$this->db
->select('marca.nome_marca,'
. 'combustivel.nome_combustivel,'
. 'cambio.descricao_cambio,'
. 'DATE_FORMAT(carro.data_criacao, "%d/%m/%Y") as criacao,'
. 'DATE_FORMAT(carro.data_modificacao, "%d/%m/%Y") as modificacao,'
. 'carro.*')
->from('carro')
->join('marca', 'marca.id = carro.id_marca')
->join('combustivel', 'combustivel.id = carro.id_combustivel')
->join('cambio', 'cambio.id = carro.id_cambio')
->order_by('carro.id', 'DESC')
->limit($limit, 0);
$query = $this->db->get();
foreach ($query->result_array() as $row)
$data[] = $row;
$query->free_result();
return $data;
它工作正常,但我发现如果表为空,则错误
致命错误:在布尔值上调用成员函数 result_array()
被抛出。我该如何解决?
【问题讨论】:
在循环前检查变量$query
的内容,如果是空数组则不能调用result_array
【参考方案1】:
在尝试获取结果之前,您应该检查查询是否有效/是否有任何行。如果表为空,则查询不会执行任何操作。
$query = $this->db->get();
$data = array();
if($query !== FALSE && $query->num_rows() > 0)
foreach ($query->result_array() as $row)
$data[] = $row;
return $data;
附:没有理由在$query->result_array()
上使用循环,您可以直接返回。它已经是一个行数组。
$query = $this->db->get();
$data = array();
if($query !== FALSE && $query->num_rows() > 0)
$data = $query->result_array();
return $data;
【讨论】:
不错。现在我必须想办法在我的视图中查看是否有任何数据,因为它在指责Invalid argument supplied for foreach()
。
@mfgabriel92:试试is_array()
。【参考方案2】:
在您的代码中进行此更改(在 $query 之后添加 $data 数组):
$query = $this->db->get();
$data = Array();
foreach ($query->result_array() as $row)
$data[] = $row;
这是因为 $data 变量不存在,除非您在循环之前创建一个空变量以防万一没有结果。
【讨论】:
虽然这是个好主意,但这不是问题的根源。你可以在不声明$data
的情况下做$data[] = ...;
,你不应该但你可以。见:php.net/manual/en/…以上是关于如果表为空,则 CodeIgniter result_array() 出现布尔错误的主要内容,如果未能解决你的问题,请参考以下文章
SQL - 内连接 2 个表,但如果 1 个表为空,则返回所有表
数据结构1.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行