Database 代码点火器使用数据库类插入MySQL函数
我获得了数据,这些数据将使用CI的数据库类保存到我的数据库中:Database 代码点火器使用数据库类插入MySQL函数,database,class,codeigniter,Database,Class,Codeigniter,我获得了数据,这些数据将使用CI的数据库类保存到我的数据库中: $data = array( 'login' => $this->input->post('login', TRUE), 'password' => $this->input->post('password', TRUE), 'email' => $this->input->post('email', TRUE) ); return $this->
$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
post散列
我试过这样做:
'password'=>“密码(.$this->input->post('password',TRUE)。”;
但是CI的数据库类将其转换为以下字符串:
INSERT INTO `accounts` [..] 'PASSWORD("mypassword")'
如您所见,它将无法工作,因为它将在“
之间保存整个字符串
有什么解决方法吗?或者我必须使用$this->db->query
?您可以使用set()
方法设置插入值,然后传递第三个参数(FALSE
),以防止CodeIgniter逃逸密码>
$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');
不要忘记转义密码!
您可以使用Colin的解决方案禁用密码转义。
您可以使用$this->db->escape对其进行转义
可能的注入示例:
$injection = '"), "malicious data" #")';
echo 'PASSWORD("'.$injection.'")';
我希望我没有弄错。一个简单的替代方法是使用CI的MD5选项。$this->form_validation->set_rules('password'、'password'、'trim | required | matches[passconf]| MD5'))是的,我知道,但是现在使用md5
有点不安全,因为已经有成千上万的网站使用md5
哈希库,黑客可以很容易地解码一些哈希。我强烈建议不要在任何地方使用任何md5哈希作为密码!@bottleboot,这就是为什么我告诉BozKay它不安全,我想使用MySQL的PASSWORD()
函数。