【问题标题】:Select and display all rows in Codeigniter在 Codeigniter 中选择并显示所有行
【发布时间】:2018-02-19 18:33:22
【问题描述】:

我是 Codeigniter 框架的新手,我想问一下是否存在另一种方法来在视图页面中显示数据库中的所有行。

我有这个控制器:

    class Dashboard extends CI_Controller{

            public function index()
    {

$data['user'] = $this->dashboard_model->get_user_details($this->session->userdata('logged_in'));  

            $this->load->view('includes/header', $data);

模型仪表板:

class Dashboard_model extends CI_Model{

    public function get_user_details($user_id){

        $this->db->select("*");
        $this->db->where('id', $user_id);
        $result = $this->db->get('users');
        return $result->result_array ();
    }
}

我在视图页面中显示如下:

<?php echo $user[0]['id']; ?> <?php echo $user[0]['username']; ?>

代码正在运行,它向我展示了我想要的,但我不知道这是否是一个好的解决方案。

【问题讨论】:

    标签: php codeigniter activerecord codeigniter-3


    【解决方案1】:

    如果它只返回单行,你也可以使用return $result-&gt;row_array ();

    然后在您的视图文件中使用以下命令获取数据:$user['id'];

    多行:

    您的解决方案很好,但您需要添加 foreach 循环并获取数据

    例如:

    foreach($user as $usr) {
      echo $usr['id']; echo  "<br/>";
      echo $usr['username'];
    }
    

    【讨论】:

    • 我需要返回更多行,而不仅仅是一个。
    • 我不需要foreach,因为我有$this-&gt;db-&gt;where('id', $user_id);
    • @JohnDoe :请再次阅读我的回答。我已经将这两个示例都用于获取单行或多行。
    • 我试过return $result-&gt;row_array();,但没有显示!
    【解决方案2】:

    通过应用$this-&gt;db-&gt;where('id', $user_id);,您将只获得具有$user_id 的用户(不是所有用户)的结果(1)和(2)只有当数据库中存在具有该ID 的用户时您才会获得结果。获取所有用户的正确方法如下:

    /**
     * @param int $user_id When NULL will return all users
     * @return array
     */
    public function get_user_details($user_id = null) {
        $this->db->from('users');
        if (!is_null($user_id)) {
            $this->db->where('id', $user_id);
            $q = $this->db->get();
            if ($q->num_rows() !== 1) {
                return array();
            }
            return $q->row_array();
        } else {
            return $this->db->get()->result_array();
        }
    }
    

    所以要获取所有用户:$this-&gt;dashboard_model-&gt;get_user_details()

    获取登录用户:$this-&gt;dashboard_model-&gt;get_user_details($this-&gt;session-&gt;userdata('logged_in'))

    要获取 id 为 123 的用户:$this-&gt;dashboard_model-&gt;get_user_details('123')

    $user_id 为空白时,您可以查看如下结果:

    if (count($users) !== 0) {
        foreach ($users as $user) {
            echo $user['id'];
            echo $user['username'];
        }
    } else {
        echo 'No users';
    }
    

    当设置$user_id 时,您会得到一个结果,因此这将起作用:

    if (count($users) !== 0) {
        echo $users['id'];
        echo $users['username'];
    } else {
        echo 'User with that id does not exist!';
    }
    

    【讨论】:

      【解决方案3】:

      对于单个用户信息,我会使用 row_array() 或 row()

      https://www.codeigniter.com/userguide3/database/queries.html

      <?php
      
      class Dashboard_model extends CI_Model{
      
          public function get_user_details($user_id){
      
              $this->db->where('id', $user_id);
              $result = $this->db->get('users');
              return $result->row_array();
          }
      }
      

      控制器

      <?php
      
      class Dashboard extends CI_Controller {
      
          public function index()
          {
      
              $this->load->model('dashboard_model');
      
              // Use the users id stored in your session when logged in 
              $userinfo = $this->dashboard_model->get_user_details($this->session->userdata('id'));  
      
              $data['id'] = $userinfo['id']; 
      
              $data['username'] = $userinfo['username']; 
      
              $this->load->view('includes/header', $data);
      
              }
      
      }
      

      然后在视图中回显

      <?php echo $username;?> example <?php echo $id;?>
      

      【讨论】:

        【解决方案4】:

        更新答案: 根据 commnets 中提供的详细信息

        return $result-&gt;row_array();代替return $result-&gt;result_array();

        查看:

        <?php echo $user['id']; ?>
        <?php echo $user['username']; ?>
        

        用于获取多行:

        return $result-&gt;result_array(); 将为您提供用户表中存在的所有用户的数组。

        您需要做的是,使用 foreach 循环访问视图页面中的这些用户。

        <?php   
        foreach ($user as $row) {
            echo $row['id'];
            echo $row['username']; 
        }
        ?>
        

        【讨论】:

        • 请检查我的 Model_dashboard。我有 $this-&gt;db-&gt;where('id', $user_id); 它不会返回所有用户。
        • 我试过return $result-&gt;row_array();,但没有显示!
        • var_dump($result->row_array());让我知道你得到了什么
        • echo $this->db->last_query();并在 phpmyadmin 中运行查询,我认为您正在传递表中不存在的 id
        • @JohnDoe 怎么能 $this->db->where('id',$user_id);给你一组行它会给你一个结果,因为你的表将有一个具有该 ID 的用户。
        【解决方案5】:

        在你的模型中

        class Dashboard_model extends CI_Model{
        public function get_user_details($user_id){
        
        return this->db->get_where('users', array('id' => $user_id))->result_array(); //You can use result_array() for more than one row and row_array() only for one row
        //If you want to show all rows form database use this return $this->db->get('users')->result(); OR result_array()
        }
        

        }

        在你看来

        对于多行使用 foreach 循环

        foreach($user as $usr){
        echo $usr['']; //Add all your database data here like this
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-08
          • 1970-01-01
          • 2016-04-28
          • 1970-01-01
          • 2022-09-22
          • 2013-08-07
          • 2015-06-16
          相关资源
          最近更新 更多