错误无法在我的代码

时间:2017-11-23 16:12:03

标签: php arrays codeigniter

这是我在模型中的功能

public function get_user($username, $password) {

    $p = md5($password);

    $this->db->select('userid, userfullname, useraddress');
             ->from('user');
             ->where('username', $username);
             ->where('userpassword', $p);
    $q = $this->db->get();
    if ($q->num_rows() == 1){
        return $q->row(); 
    }
    else ($q->num_rows() > 1){
        return $q->result_array();
    }
}

这是我在控制器中的代码,我想将$ q的值返回给result []         $这 - >负载>模型(' User_model&#39);

    $username = $this->post('username');
    $password = $this->post('password');
    $token    = $this->post('token');

    $result   = [];

    if($this->security->xss_clean($username, TRUE) && $this->security->xss_clean($password, TRUE)) {

        $result = $this->User_model->get_user($username, $password);

    }

我有错误无法使用stdClass类型的对象作为数组

3 个答案:

答案 0 :(得分:0)

我确信您在每一行中都不需要;来制作链式方法

$this->db->select('userid, userfullname, useraddress')
             ->from('user')
             ->where('username', $username)
             ->where('userpassword', $p);
    $q = $this->db->get();

或者更好地结合所有

$q  = $this->db->select('userid, userfullname, useraddress')
        ->from('user')
        ->where('username', $username)
        ->where('userpassword', $p)
        ->get();

答案 1 :(得分:0)

如果您在控制器中执行此操作?

$result   = []; // $result is set as empty array

if($this->security->xss_clean($username, TRUE) && $this->security->xss_clean($password, TRUE)) {

  // notice the [] 
  $result[] = $this->User_model->get_user($username, $password);

}

或者更好的是:

$this->db->select('userid, userfullname, useraddress')
             ->where('username', $username)
             ->where('userpassword', $p)
$q = $this->db->get('user');

if ($q->num_rows() == 1) {
    return array($q->row());
}
else($q->num_rows() > 1) {
    return $q->result_array();
}


//  in controller
$result   = [];

if($this->security->xss_clean($username, TRUE) && $this->security->xss_clean($password, TRUE)) {
     $result = $this->User_model->get_user($username, $password);
}

答案 2 :(得分:0)

首先,在两个输入都是唯一的函数中,为什么你会期望超过1个用户出现?其次,我必须假设此函数与登录有某种关联,因此如果没有返回结果,它应该返回并返回错误。第三,你从模型中返回两种不同的类型,row()作为对象,result_array显然是一个数组。

然后,您通常会将返回的row()应用于数组$result[]。奇怪的。让我们解决这个问题......

public function get_user($ username,$ password) {

$p = md5($password);
$this->db->select('userid, userfullname, useraddress')
    ->from('user')
    ->where('username', $username)
    ->where('userpassword', $p);
$q = $this->db->get();
if ($q->num_rows() == 1) {
    return $q->row_array();
} else {
    return false;
}

}

现在,您将始终返回一个数组,而不是一个带有row_array()的对象,或者一个空数组失败(使用这些详细信息找到多于或少于一个用户)。说实话,用户可能拥有相同的名称和密码,接近0!

所以现在当你这样分配它时:

    $result   = [];

    if($this->security->xss_clean($username, TRUE) && $this->security->xss_clean($password, TRUE)) {

        $result = $this->User_model->get_user($username, $password);

    }

您必须明白,要获得$result的值,您必须执行此操作:

$result['userid']如果模型返回false,可能会导致通知,因此您必须检查并在获取值之前传播相应的错误!