【问题标题】:CodeIgniter result_array() on boolean error if the table is empty如果表为空,则 CodeIgniter result_array() 出现布尔错误
【发布时间】: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

标签: mysql codeigniter


【解决方案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/…
猜你喜欢
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2020-07-13
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2013-05-06
相关资源
最近更新 更多