2010-09-08 46 views
6

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

我打电话查询/视图从控制器如下:

$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。

回答

11

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

+0

是的,我可以看到如何在模型中使用它来返回行数,但是我不得不将该值传递给视图,这似乎有很长的路要走。 – Linker3000 2010-09-08 13:05:48

+0

- 编辑啊,我发现我实际上可以在视图中使用$ result-> num_rows,也可以在模型中使用原始查询。在视图中这样做会被视为确定吗? – Linker3000 2010-09-08 13:23:27

+0

不是。你应该从模型中返回一个数组。一个因素是计数,另一个是结果。我通常返回模型的row_array结果,顺便说一句。 – janosrusiczki 2010-09-09 05:20:28

0

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

+0

计数($ result)的问题是,即使存在0,7或70个结果,它总是返回1。 – Linker3000 2010-09-08 14:06:08

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循环时),并且您可以指定如果没有结果。

+0

谢谢尤里克。我已经将Kitsched的回答标记为我接受的答案,因为他首先建议num_rows,但是您的解释对于清晰起见很有帮助。 – Linker3000 2010-09-09 10:56:00

+0

根本没问题:) – 2010-09-09 11:56:17

0

如果您在if声明中放入count($result),那么当它成功时,它仅返回1

您可以用不同的方式尝试 $query->num_rows()

0

例如我计数显示管理员连接ANS用户连接

数据库

在用户我添加表:[状态] [INT] [1]

在用户也我已经

:在登录验证()

[作用] [VARCHAR] [255]

更新statut为1(onligne) 0

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; 
    } 

更新后的状态中退出离线()

注销控制器:

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; 
    } 

计数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> 
0

我正在dowing这一点,它workd我

控制器

$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; 
     } 
    } 
} 
相关问题