计算Codeigniter中数据库查询返回的结果数

时间:2010-09-08 12:29:06

标签: php codeigniter database-abstraction

我没有太多运气检测Codeigniter中的数据库查询何时返回零结果。我已经很好地阅读了关于PHP计数功能的注释,但我没有更明智!

我从控制器调用查询/视图如下:

$data['result'] = $this->search_model->do_search(set_value('name'));
$data['title'] = "Search results";
$this->load->view('search_view',$data);

该视图为我生成了一个结果表,但是当我尝试捕获一个空结果时,计数​​总是返回1:

我已尝试if count(array($result))if count($result)

那么什么是获得计数的好方法?我在我的开发笔记本电脑上使用Fedora 13和PHP 5.3.3。

6 个答案:

答案 0 :(得分:11)

查看$query->num_rows(< - clickable)。

答案 1 :(得分:8)

您的模型中最好的做法如下:

$query = $this->db->something()....
...
...
if ( $query->num_rows() > 0 )
{
    return $query->result();
}
else
{
    return FALSE;
}

然后在您的控制器或视图中,您将执行以下操作:

if ( !empty($my_db_result) ) 
{
    ......
}

此过程使您可以根据结果类型响应结果。如果可以检索行,这将返回一个数组,其中的项目可以通过PHP的count()函数进行计数。由于第二个块检查结果是否为空(注意“FALSE”被视为空),您将不会遇到任何问题(例如,当使用foreach循环时),并且您可以指定在没有的情况下该怎么做结果

答案 2 :(得分:0)

在您的视图文件上尝试if(isset($result) && count($result))然后在if语句中,当您的数据库中的插入超过0时,您可以编写要执行的代码...祝您好运!

答案 3 :(得分:0)

如果您将count($result)放在if语句中,那么当它成功时,它只返回1

你可以试试 $query->num_rows()以不同的方式。

答案 4 :(得分:0)

例如,我计算显示管理员连接和用户连接

<强>数据库

在用户中我添加了表:[status] [int] [1]

在用户中我也有:[role] [varchar] [255]

在登录验证()中将statut更新为1(onligne)

if($this->model_users->can_log_in($email,$pass)){   
$update = array('status' => 1);
$this->model_users->update_onligne($email,$update);
redirect('main/members');

和型号:

public function update_onligne($email,$update){
        $this->db->where('email',$email);
        $this->db->update('users',$update);
        return true;
    }

在logout()

中将状态更新为离线状态

退出控制器:

public function logout(){
        $id = $this->session->userdata('id');
        $update = array('status' =>0);
        $this->model_users->logout($id,$update);
        $this->session->sess_destroy();
        redirect('main/login');
    }

退出模式:

public function logout($id,$update){
        $this->db->where('id',$id);
        $this->db->update('users', $update);
        return;
    }

Count Onligne:

控制器:

$data['admin_onligne'] = $this->model_users->count_onligne_admin();
$data['user_onligne'] = $this->model_users->count_onligne_users();
$this->load->view('template/page_left',$data);

型号:

public function count_onligne_admin(){
            $query = $this->db->query('SELECT COUNT(status) AS enligneadmin FROM users WHERE status=1 AND role="admin"')->row_object();
            return $query->enligneadmin;
        }

public function count_onligne_users(){
            $query = $this->db->query('SELECT COUNT(status) AS enligneuser FROM users WHERE status=1 AND role="etudiant"')->row_object();
            return $query->enligneuser;
        }

查看器

<span><?php echo $user_onligne ;?> User en ligne</span>
<span><?php echo $admin_onligne ;?> Admin en ligne</span>

答案 5 :(得分:0)

我贬低这个并且它适合我

<强>控制器

$id = $this->session->userdata('id');
if($this->model_users->if_user_dont_have_email($id)){
....
}

模型用户

public function if_user_dont_have_email($id){
    $query = $this->db->query("SELECT email FROM users WHERE id='$id'");
    if ($query->num_rows() > 0) {
        $row = $query->row_array(); 
        if(empty($row['email'])){
            return true;
        }else{
            return false;
        }
    }
}