Я попытался добавить пользователя в мою базу данных только с first_name
, last_name
, username
, email
и password
и он работает.
Однако, когда я пытаюсь добавить пользователя с другими значениями, такими как $IP
и прочее, это не сработает. Это просто говорит
"Ошибка базы данных Произошла"
Мой код в model_user.php
public function insert_user() {
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$username = $this->input->post('username');
$email = $this->input->post('email');
$password = $this->input->post('password');
$IP = "2";
$total_entry = 1;
$average_entry = 1;
$date_of_registration = date("Y-m-d H:i:s");
$lastactive = date("Y-m-d H:i:s");
$user_level = 2;
$account_state = "Active";
//insert data into database. SQL Injection bypass
$sql = "INSERT INTO users (first_name, last_name, username, email, password, IP, total_entry, average_entry, date_of_registration, lastactive, user_level, account_state )
VALUES (" . $this->db->escape($first_name) . ",
" . $this->db->escape($last_name) . ",
" . $this->db->escape($username) . ",
'" . $email . "',
'" . $password . "'
'" . $IP . "'
'" . $total_entry . "'
'" . $average_entry . "'
'" . $date_of_registration . "'
'" . $lastactive . "'
'" . $user_level . "'
'" . $account_state . "')";
$result = $this->db->query($sql);
Приведенный выше код не работает вообще. Однако, когда я прокомментирую несколько вещей, это работает. Этот код работает после комментирования нескольких вещей:
//insert data into database. SQL Injection bypass
$sql = "INSERT INTO users (first_name, last_name, username, email, password)
VALUES (" . $this->db->escape($first_name) . ",
" . $this->db->escape($last_name) . ",
" . $this->db->escape($username) . ",
'" . $email . "',
'" . $password . "')";
/* '" . $IP . "'
'" . $total_entry . "'
'" . $average_entry . "'
'" . $date_of_registration . "'
'" . $lastactive . "'
'" . $user_level . "'
'" . $account_state . "')"; */
С помощью приведенного выше кода пользователь успешно зарегистрирован. Я не знаю, что я делаю неправильно.
Эта ошибка может возникнуть из-за отсутствия запятой после атрибутов "пароль", "IP", "total_entry" и т.д. Это объясняет, почему код работает, когда вы комментируете эти атрибуты.
Почему вы не используете активную запись? Вы резко уменьшите риск ошибки.
$data = array(
'first_name' => $first_name ,
'last_name' => $last_name ,
'username' => $username,
'email' => $email,
'password' => $password,
'IP' => $IP,
'total_entry' => $total_entry,
'average_entry' => $average_entry,
'date_of_registration' => $date_of_registration,
'lastactive' => $lastactive,
'user_level' => $user_level,
'account_state' => $account_state
);
$this->db->insert('tablename', $data);
С другой стороны, вы должны отделить вызовы базы данных в моделях и процесс после отправки
контроллер:
$data = array(
'first_name' => $this->input->post('first_name'),
/*other fields here */
);
$this->my_model->insert_user($data);
Модель:
function insert_user($data)
{
$this->db->insert("table", $data);
}
Подробнее здесь: http://www.codeigniter.com/user_guide/database/active_record.html#insert
TEXT
,VARCHAR
...?