我正在通過Anthony Viponds Youtube tutorial學習CodeIgniter。在創建和註冊和登錄系統時,我已經完成了課程,但有一些問題。 我能夠註冊哪些可以在數據庫中看到。因此,爲了測試目的,我已經使用用戶名'test'和密碼'test'進行了帳戶,該帳戶存儲在數據庫中作爲098f6bcd4621d373cade4e832627b4f6存儲在MD5哈希中。散列使用在線描述服務有效存儲和解密。所以不存在修剪問題。 Codeigniter 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查詢。
所以輸出返回的查詢。
SELECT * FROM `users` WHERE `username` = 'test' AND `password` = '098f6bcd4621d373cade4e832627b4f6'
下一步是在phpMyAdmin中運行此查詢。哪一個返回了結果。這意味着這個查詢是有效的。
所以,問題是:爲什麼NUM_ROWS返回0,而在phpMyAdmin同一查詢返回1(有效的結果)?
從我多麼愚蠢的錯誤。 Works wel ..將盡可能標記爲解決方案。謝謝。 – pbalazek
非常清楚,有據可查的問題......幹得好! – jcorry