【问题标题】:Getting a single value from database - Codeigniter从数据库中获取单个值 - Codeigniter
【发布时间】:2013-05-06 04:22:18
【问题描述】:

我正在尝试获取注册用户的名字和姓氏。 这是我模型中的 getfirstname , getlastname 函数

public function getf()
{  

  $email = $this->input->post('email');
  $this->db->where('email', $this->input->post('email'));
  $query = $this->db->get('users');
        if($query->num_rows == 1)
        {
          $row = $query->row();
          echo $row->fname;
        }

}


public function getl()
{
    $this->db->where('email', $this->input->post('email'));
    $query = $this->db->get('users');
    if($query->num_rows == 1)
    {
        $row = $query->row();
        echo $row->lname;
    }

}

在我的控制器中:

public function members()
{
    if($this->session->userdata('is_logged_in'))
    {

        $data['fname'] = $this->getf(); 
        $data['lname'] = $this->getl();
        $this->load->view('members', $data);
    }
    else
    {
        redirect('main/restricted');
    }
}

我在我的视图中回显 fname 和 lname 变量,它打印“数组”而不是实际的名字和姓氏

echo $fname;
echo $lname;

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    你打电话给模特是完全错误的,你不是 遵循标准程序。像这样试试。 分离逻辑

    控制器

    public function members()
    {
        if($this->session->userdata('is_logged_in'))
        {
    
            $email  =   $this->input->post('email');
            $result =   $this->mymodel->getnames($email); 
            if($result){
                $data['fname'] = $result->first_name;
                $data['lname'] = $result->last_name;
                $this->load->view('members', $data);
            }
        }
        else
        {
            redirect('main/restricted');
        }
    }
    

    并为模型创建单个函数而不是两个函数 对于可以使用单个函数检索的两个值 也返回对象而不是回显

    public function getnames($email)
    {  
        $this->db->where('email',$email);
        $query = $this->db->get('users');
        if($query->num_rows == 1)
        {
            return $query->row();
        }
        return false;
    }
    

    【讨论】:

      【解决方案2】:

      据我所见,您实际上并没有声明“fname”和“lname”变量,除非我错过了它,但如果它一直返回“Array”,那是因为您需要使用序列化数组

      $variable = json_encode($arrayName);
      

      这会将数组转换为字符串,希望对您有所帮助。

      【讨论】:

      • 但我将 $data 数组传递到视图中。 fname 和 lname 会在视图中转换成变量吧?
      • 啊,我明白了,但是您不能直接将数组转换为独立的字符串变量...您必须对数组进行字符串化或序列化,以便可以将其拆分,或者如果不是,那么它就是因为您没有指定要使用数组的哪一部分...所以如果我有一个类似... fname
      • $fname[0] 我猜是空的。它不打印任何东西。 var_dump 显示它被设置为 NULL。无法找到 getf 和 getl 函数不返回值的原因
      • 我认为这可能是因为您已经创建了查询并且您已经创建了行...您已经创建了结果,在 MySQL 中您必须创建查询,将查询传递给结果并将结果传递给行
      【解决方案3】:

      用户模型

      class UserModel extends CI_Model
      {
          public function getItemByEmail($email)
          {  
              // check email
              $this->load->helper('email');
      
              if( ! $email OR ! valid_email($email))
                  return array();
      
              $this->db->where('email', $email);
              $this->db->limit(1);
              $item = $this->db->get('users')->row();
      
              return $item;
          }
      }
      

      控制器:

      public function members()
      {
          if( ! $this->session->userdata('is_logged_in'))
              redirect('main/restricted');
      
          $this->load->model('UserModel');
      
          $this->load->view('members', array(
              'userRow' => $this->UserModel->getItemByEmail($this->input->post('email', TRUE))
          ));
      }
      

      查看:

      <?= (isset($userRow->fname) ? $userRow->fname : ''); ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-29
        • 1970-01-01
        相关资源
        最近更新 更多