Code Igniter вставляет функцию MySQL с классом базы данных - PullRequest
3 голосов
/ 10 февраля 2012

Я получил данные, которые будут сохранены в моей базе данных с использованием класса базы данных 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 ]

3 голосов
/ 10 февраля 2012

Вы можете использовать метод 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 голосов
/ 14 марта 2012

Не забудьте уйти от пароля!
Вы отключаете экранирование для пароля с помощью решения Колина.
Вы можете использовать $ this-> db-> escape , чтобы убежать от него
пример возможного введения:

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

Надеюсь, я правильно понял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...