2012-08-28 57 views
0

要設計密碼用戶名認證,我嘗試從表(成員資格)檢索'salt'並將其附加到密碼。然後使用SHA256加密組合。但是,當我寫的validate()函數如下,錯誤傳出如何在CodeIgniter中編寫用於數據庫查詢的複合語句

嚴重性:4096

消息:類CI_DB_mysql_driver的對象無法轉換爲 串

代碼:

public function validate(){ 

    $this->db->where('username',$this->input->post('username')); 
    $salt=(string)$this->db->select('salt'); 
    $this->db->where('password',hash('sha256',$this->input->post('password').$salt)); 
    $query=$this->db->get('membership'); 

    if($query->num_rows()==1){ return TRUE; } 
} 

如何解決問題?我使用的是codeigniter 2.1.2。非常感謝!

回答

0

您需要創建兩個單獨的查詢:

public function validate(){ 

    $this->db->select('salt'); 
    $this->db->where('username', $this->input->post('username', TRUE)); 
    $salt = (string) $this->db->get('membership')->row()->salt; 

    $this->db->where('password', 
        hash('sha256', $this->input->post('password', TRUE). $salt)); 
    $query=$this->db->get('membership'); 

    if($query->num_rows()==1) { 
     return TRUE; 
    } 
    return FALSE; 
} 
+0

它的工作原理!非常感謝! – CT006

+0

很高興幫助。 –

+0

難道這不是使用MySQL的哈希完成的嗎?即'$ this-> db-> where('Password','SHA2(concat('。$ this-> db-> escape($ this-> db-> post('password',true))。', salt),256)',null);'? – Gavin

相關問題