2012-02-10 72 views
3

我得到的數據,那將要保存到使用CI的數據庫類我的數據庫:代碼點火器插入帶有數據庫類MySQL的功能

$data = array(
    'login' => $this->input->post('login', TRUE), 
    'password' => $this->input->post('password', TRUE), 
    'email' => $this->input->post('email', TRUE) 
); 

return $this->db->insert('account', $data); 

現在我需要使用MySQL的函數PASSWORD()得到password後期哈希。

我已經試過這樣:

'password' => "PASSWORD(" . $this->input->post('password', TRUE) . ");

但CI的數據庫類將其轉換爲以下字符串:

INSERT INTO `accounts` [..] 'PASSWORD("mypassword")' 

所以你可以看到,它不會因爲工作它將保存整個字符串在'之間。

有沒有解決方案,或者我不得不使用$this->db->query

+0

一個簡單的選擇是使用CI的MD5選項。 '$ this-> form_validation-> set_rules('password','Password','trim | required | matches [passconf] | md5');' – Boz 2012-02-10 18:04:37

+0

是的,我知道但是這些時候使用'md5'有點不安全,因爲已經有成千上萬個擁有'md5'散列庫的站點,並且黑客可以輕鬆解碼一些散列。 – Cyclone 2012-02-10 18:07:55

+0

我強烈建議** NOT **在任何地方使用任何md5哈希密碼! – bottleboot 2012-02-10 18:18:41

回答

3

您可以使用set()方法設置INSERT值,然後傳遞第三個參數(FALSE)以防止CodeIgniter轉義PASSWORD。類似這樣的:

$this->db->set('login', $this->input->post('login', TRUE)); 
$this->db->set('password', 'PASSWORD("'.$this->input->post('password', TRUE).'")', FALSE); 
$this->db->set('email', $this->input->post('email', TRUE)); 

return $this->db->insert('account'); 
+0

謝謝!對我來說工作得很好。 – Cyclone 2012-02-10 18:17:22

+0

@Cyclone:太好了!很高興它爲你工作。 – 2012-02-10 18:17:42

0

不要忘了忘記密碼!
您可以通過Colin的解決方案禁用轉義密碼。
你可以使用$這個 - > DB->逃脫逃脫它
例如可能的注入:

$injection = '"), "malicious data" #")'; 
echo 'PASSWORD("'.$injection.'")'; 

我希望我有這個權利。