Database 代码点火器使用数据库类插入MySQL函数

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->

我获得了数据,这些数据将使用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
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()
函数。