#php #mysql #codeigniter
#php #mysql #codeigniter
Вопрос:
У меня все хорошо с CodeIgniter. Я могу выполнять операторы SELECT в своей базе данных MySQL без каких-либо проблем. Но теперь я пытаюсь выполнить оператор INSERT.
Обратите внимание, что я еще не пробовал инструкцию UPDATE.
После прочтения документов я в замешательстве.
Это то, что у меня есть:
contacts.php:
function add() {
//echo "<pre>";print_r($_POST);
$this->load->model('Contacts_model');
$this->Contacts_model->insertContact($_POST);
}
contacts_model.php:
function insertContact($_POST) {
//echo "<pre>";print_r($_POST);
$title = $_POST['title']; // I can echo this here. It works
$f_name = $_POST['f_name']; // I can echo this here. It works
$sql = "INSERT INTO contacts (title,f_name) " .
"VALUES (" .
$this->db->escape($title) .
"," .
$this->db->escape($f_name) .
")";
$this->$db->query($sql);
}
Я читал об активной записи, но если это то, что меня смущает, то я все еще не понимаю, что я делаю не так. Все примеры выглядят точно так же, как мои.
Помогите?
Редактировать
$sql = "INSERT INTO contacts (title,f_name) VALUES ('$this->db->escape($title)','$this->db->escape($f_name)'";
$this->$db->query($sql);
Я тоже пробовал это так. И многие другие варианты. Кажется, это не мой синтаксис … я думаю.
Ответ №1:
Ваш запрос в порядке, единственная причина, по которой запрос не выполняется, заключается в том, что вы используете это:
$this->$db->query($sql);
нет ничего похожего на $db, просто используйте это:
$this->db->query($sql);
Я уверен, что это проблема, но если это не так, пожалуйста, пожалуйста, сообщите об ошибке, что она дает. Спасибо.
Надеюсь, это поможет.
Комментарии:
1. О, я мог бы пнуть себя. Я так увлекся другими более сложными частями этого фреймворка, что даже не заметил такой глупой опечатки! Большое вам спасибо!
2. также проверьте
$id = $this->db->insert_id(); if($id>0){ //successfull entry} else{//unsuccessfull entry}
Ответ №2:
Вы пропустили символ кавычки:
$title = $this->db->escape($title);
$fname = $this->db->escape($f_name)
$sql = "INSERT INTO contacts (title,f_name) " .
"VALUES ('{$title}', '{$fname}')";
$this->db->query($sql);
Кстати, что, черт возьми, с $_POST
переменной? Это одна из суперглобальных переменных. Вам не нужно передавать его в параметре. Вы всегда можете безопасно вызвать его в любом месте вашего скрипта.
Еще одно замечание, поскольку вы используете CodeIgniter, вам лучше проверить Input
библиотеку классов и использовать ее для всех ваших нужд ввода.
Комментарии:
1. Переменная $ _POST предназначена только для того, чтобы я мог вставить данные, чтобы посмотреть, смогу ли я вставить данные. Теперь, когда я могу (потому что опечатка $ db исправлена), я перехожу к фильтрации моего ввода и делаю это правильно. Я немедленно проверю библиотеку классов для ввода 🙂 Спасибо за помощь!
2. Человек, это не его проблема, не говорите ему использовать $this-> $db-> query($ sql);
Ответ №3:
Why send $_POST? Use $this->input->post("param_name") and in your instance "$this->load->model('Contacts_model');" in my practice i use "$this->load->model('Contacts_model','instance',[true or false]);" the last parameter is optional (to connect with the DB if you don't use autoload option).
Use this:
function insertContact() {
$title = $this->input->post("title");
$f_name = $this->input->post("f_name");
$sql = "INSERT INTO contacts (title,f_name) " .
"VALUES ('" . $this->db->escape($title) . "','".$this->db->escape($f_name) ."')";
$this->$db->query($sql);
}
DON'T USE $_POST! (And use the Active Record read the user guide)