Codeigniter num_rows()返回0,同一查询返回1

时间:2016-03-13 13:30:35

标签: php mysql codeigniter

我正在通过Anthony Viponds Youtube tutorial学习CodeIgniter。在创建和注册以及登录系统时,我已完成课程,但遇到了一些问题。 我可以注册哪些可以在DB中看到。因此,出于测试目的,我使用用户名'test'和密码'test'创建了一个帐户,该帐户在MD5哈希中作为098f6bcd4621d373cade4e832627b4f6存储在数据库中。使用在线描述服务有效地存储和解密散列。所以没有类似修剪的问题。 enter image description here

当我尝试登录并将内容发布到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(有效结果)?

1 个答案:

答案 0 :(得分:5)

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

$query->num_rows()