2016-03-13 60 views
3

我正在通过Anthony Viponds Youtube tutorial学习CodeIgniter。在创建和注册和登录系统时,我已经完成了课程,但有一些问题。 我能够注册哪些可以在数据库中看到。因此,为了测试目的,我已经使用用户名'test'和密码'test'进行了帐户,该帐户存储在数据库中作为098f6bcd4621d373cade4e832627b4f6存储在MD5哈希中。散列使​​用在线描述服务有效存储和解密。所以不存在修剪问题。 enter image description hereCodeigniter num_rows()返回0,同样的查询返回1

当我尝试登录并将内容发布到validate方法时,我收到了索引页,这意味着num_rows方法返回0而不是1,表示有效登录。

membership_model.php

function validate() { 
    $this->db->where('username', $this->input->post('username')); 
    $this->db->where('password', md5($this->input->post('password'))); 
    $query = $this->db->get('users'); 
    print_r($this->db->queries); 

    if($query->num_rows == 1) { 
     return true; 
    } 
    else { 
     echo "Wrong"; 
    } 
} 

的login.php

function validate_credentials() { 
    $this->load->model('membership_model'); 
    $query = $this->membership_model->validate(); 
    if ($query) { 
     $data = array(
      'username' => $this->input->post('username'), 
      'is_logged_in' => true 
      ); 
     echo 'here #1'; 
     $this->session->set_userdata($data); 
     redirect('site/members_area'); 
    } 
    else 
    { 
     $this->index(); 
    } 
} 

正如你看到的,我也做了一个 '在这里#1' 回响这将表明我达到这一点。但正如我所提到的,它将我重定向到索引,这意味着else在login.php中执行。

所以很显然,membership_model的validate()没有返回任何TRUE。

我用

print_r($this->db->queries); 

查看输出和实际的SQL查询。

enter image description here

所以输出返回的查询。

SELECT * FROM `users` WHERE `username` = 'test' AND `password` = '098f6bcd4621d373cade4e832627b4f6' 

下一步是在phpMyAdmin中运行此查询。哪一个返回了结果。这意味着这个查询是有效的。

enter image description here

所以,问题是:为什么NUM_ROWS返回0,而在phpMyAdmin同一查询返回1(有效的结果)?

回答

5

$query->num_rows不是一个方法调用...

$query->num_rows()

+0

从我多么愚蠢的错误。 Works wel ..将尽可能标记为解决方案。谢谢。 – pbalazek

+0

非常清楚,有据可查的问题......干得好! – jcorry