我获得了数据,这些数据将使用CI的数据库类保存到我的数据库中:
$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 :(得分: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');
答案 1 :(得分:0)
不要忘记忘记密码!
您可以使用Colin的解决方案禁用转义密码。
您可以使用 $ this-> db-> escape 来逃避它
可能注射的例子:
$injection = '"), "malicious data" #")';
echo 'PASSWORD("'.$injection.'")';
我希望我做对了。