Ошибка: вы должны использовать & quot; установить & quot; способ обновить запись исправить?

Я использую codeigniter в качестве своего PHP-фреймворка, и я получаю эту ошибку, когда отправляю свой пост в мою базу данных.

You must use the "set" method to update an entry

Я не совсем уверен, что это означает, что из других постов, на которые я смотрел, все говорят, что объекту datamapper необходимо присвоить значение.

Поскольку я новичок во всем этом, кто-то может дать мне лучшее объяснение.

Вот мой код, где написано, что у меня ошибка:

class Add_book extends CI_Model {

public function add_book($data){

$this->db->insert('ST_ITM', $data);

}

}

?>

Спасибо.

2

Решение

Вам нужно сделать что-то вроде этого примера

class Add_book extends CI_Model {

public function add_book(){

// 'book_name' would be the name of your column in database table

$data = array(
'book_title' => $this->input->post('book_title'),
'book_author' => $this->input->post('book_author'),
'book_name' => $this->input->post('book_name')
);

$this->db->set($data);
$this->db->insert($this->db->dbprefix . 'ST_ITM');

}

}

На вид вход будет как пример

<input type="text" name="book_name" value="" />

<input type="text" name="book_title" value="" />

<input type="text" name="book_author" value="" />

Лучше всего использовать массив данных в модели. а затем загрузить функцию модели в успешной части проверки формы Библиотека

1

Другие решения

Всем, кто прибывает сюда, вам НЕ обязательно использовать set в ваших запросах на вставку:

https://www.codeigniter.com/userguide3/database/query_builder.html#inserting-data

$data = array(
'title' => 'My title',
'name' => 'My Name',
'date' => 'My date'
);

$this->db->insert('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')

Ошибка является результатом неверно созданных данных вставки (должен быть массивом) или неудачной записи правильного запроса Active Record, как, например, не добавление имени таблицы перед массивом вставки.

Но сэр, когда делать мы используем набор?

Когда вам нужно обойти автоматический побег во время обновлений или замен например:

$this->db->set('last_login', 'NOW()', FALSE);
$this->db->update(DB_PREFIX .'user', array('login_attempts' => 0));

Третий параметр отключил авто-экранирование. Это дает нам необходимую гибкость при написании запросов Active Record.

1

Например, я хочу вставить данные, поэтому я должен сделать код, как показано ниже —

Мой файл просмотра (Login_form.php)

    <label>Username:</label> <input type="text" name="username" value="">

<label>Password:</label> <input type="password" name="password" value="">

Файл моей модели (Model_login.php)

    class Model_login extends CI_Model {

public function insert_entry()
{

$data= array(
'username'=>$this->input->post('username'), // here username and password are database fields.

'password'=>$this->input->post('password'),

);

$this->db->insert('login', $data); //here login is my database table's name

}
}

Файл контроллера (Login.php)

    class Login extends CI_Controller {

public function index()

{

$this->load->view('Login_form'); //to load view file

}

public function getLoginValues()

{
$this->load->model('Model_login'); //to load Model file
$data=$this->Model_login->insert_entry();//to load method of Model file
}
}

Работает нормально, проверь.

0

Я получил эту ошибку, когда я проходил неправильная переменная в оператор вставки.

Например :

function($a){
$this->db->insert($aa); <-- error !!
}

Поэтому я решил это, передав правильную переменную, которая равна $ a.

Также убедитесь, что ваш массив вставок правильно отформатирован как $a = array('columnname'=>'value');

0