Оператор Insert с помощью CodeIgniter — так запутан

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