Code Igniter使用数据库类插入MySQL函数

时间:2012-02-10 17:56:15

标签: 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->db->insert('account', $data);

现在我需要使用MySQL函数PASSWORD()来获取password帖子哈希值。

我试过这种方式:

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

但CI的数据库类将其转换为以下字符串:

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

正如您所看到的,它将无效,因为它会将整个字符串保存在'之间。

是否有任何解决方案或我必须使用$this->db->query

2 个答案:

答案 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.'")';

我希望我做对了。