Codeigniter始终只返回查询结果的第一行

时间:2014-09-20 06:57:50

标签: php mysql codeigniter

更新

我尝试在sizeof($result)上使用controller,结果超过1,所以我认为 错误在控制器的某个地方

我尝试运行此查询:

    $query = "SELECT * FROM `hospital` WHERE name LIKE '%$keyword%' OR address LIKE '%$keyword%' OR telp LIKE '%$keyword%'";

$keyword取决于应用中的用户类型。

这是CI查询:

$query = $this->db->select('*')
        ->from($table)
        ->like('name', $keyword, 'both')
        ->or_like('address', $keyword, 'both')
        ->or_like('telp', $keyword, 'both')
        ->get()
        ->result_array();

上面的查询始终只返回第1行。

这是在控制器中:

if(sizeof($result) > 0)
        {
            foreach($result as $hospital)
            {
                if($hospital)
                {
                    $this->response(array('result' => 'true', 
                    'id' => $hospital['id'], 
                    'name' => $hospital['name'], 
                    'address' => $hospital['address'], 
                    'telp' => $hospital['telp']), 200); // 200 being the HTTP response code
                }
            }
        }
        else
        {
            $this->response(array('result' => 'false'), 404);
        }

我的错误在哪里?当我试图在phpmyadmin中硬输入查询时,查询运行完美(返回所有行)。

感谢您的时间

3 个答案:

答案 0 :(得分:0)

您正在将查询结果分配给$query变量,然后尝试迭代未在任何位置声明的$result数组。尝试:

if(sizeof($query) > 0) {
    // ...
}

或将$query更改为$result

答案 1 :(得分:0)

以下是处理此要求的另一种方法。

$this->db->select('*')
        ->from($table)
        ->like('name', $keyword, 'both')
        ->or_like('address', $keyword, 'both')
        ->or_like('telp', $keyword, 'both');

$query = $this->db->get();
if ($query->num_rows() > 0) {
  $result= $query->result_array();
  //and bla bla
}

使用

$query->num_rows()

我们也可以从模型中返回总行数。 如果num_rows为零,您还可以在模型类中进行查询返回false,如果函数返回数组或false,则从控制器检查。

答案 2 :(得分:0)

我觉得你不需要 - > result_array();

- > get()就足够了。

删除所有 - > result_array()实例。