【问题标题】:Counting the number of results returned by a database query in Codeigniter在 Codeigniter 中计算数据库查询返回的结果数
【发布时间】:2011-04-09 17:22:34
【问题描述】:

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

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

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

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

我试过if count(array($result))if count($result)

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

【问题讨论】:

    标签: php codeigniter database-abstraction


    【解决方案1】:

    【讨论】:

    • 是的,我可以看到如何在模型中使用它来返回行数,但是我必须将值传递给视图,这似乎还有很长的路要走东西?
    • --编辑啊,我看到我实际上可以在视图中使用 $result->num_rows 以及模型中的原始查询。在视图中这样做会被认为是可以的吗?
    • 并非如此。相反,您应该从模型中返回一个数组。一个元素是计数,另一个元素是结果。我通常从模型返回 row_array 结果,顺便说一句。
    • 是的,这是有道理的,并将事情保持在预期的位置。仍然不确定为什么 count 不起作用,但现在是继续前进的时候了,也许稍后再回到该代码进行更多调查。非常感谢
    【解决方案2】:

    我正在做这个,它对我有用

    控制器

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

    【讨论】:

      【解决方案3】:

      例如,我计数以显示连接的管理员和连接的用户

      数据库

      在用户中我添加表:[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;
          }
      

      计数:

      控制者:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          在你的模型中最好的做法是:

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

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

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

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • count($result) 的问题在于它总是返回 1,即使有 0、7 或 70 个结果。
            猜你喜欢
            • 2012-02-07
            • 2015-11-20
            • 2012-10-21
            • 1970-01-01
            • 1970-01-01
            • 2011-12-25
            • 1970-01-01
            • 2014-05-02
            • 1970-01-01
            相关资源
            最近更新 更多