可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am using codeigniter as my PHP framework, and I keep getting this error when I submit my from to post to my database.
You must use the "set" method to update an entry
I am not exactly sure what that means, from the other posts I have looked at, everyone says that the datamapper needs to have a value assigned to the object.
Being that I am new to all this, could someone give me a better explaniation.
Here is my code where it says I have the error:
class Add_book extends CI_Model {
public function add_book($data){
$this->db->insert('ST_ITM', $data);
}
}
?>
Thank you.
回答1:
You need to do something like this Example Only
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');
}
}
On view the input would be like example
<input type="text" name="book_name" value="" />
<input type="text" name="book_title" value="" />
<input type="text" name="book_author" value="" />
Best to use a data array in model. and then load model function in success part of form validation Library
回答2:
To all who arrive here, you do NOT have to use set in your insert queries:
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')
The error is a result of misconstructed insert data (must be an array) or failing to write the correct Active Record query like for example not adding the table name before the insert array.
But sir, when do we use set?
When you need to bypass automatic escaping during updates or replacings for example:
$this->db->set('last_login', 'NOW()', FALSE);
$this->db->update(DB_PREFIX .'user', array('login_attempts' => 0));
The third parameter disabled auto-escaping. This gives us the necessary flexibility when writing Active Record queries.
回答3:
For Example I want to insert data, so I have to do code like below -
My View File(Login_form.php)
<label>Username:</label> <input type="text" name="username" value="">
<label>Password:</label> <input type="password" name="password" value="">
My Model File(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
}
}
Controller File(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
}
}
It works fine, check it.
回答4:
I got this error when i was passing wrong variable into the insert statement.
For example :
function($a){
$this->db->insert($aa); <-- error !!
}
So I solved it by passing in the right variable, which is $a.
Also make sure your insertion array is correctly formatted as $a = array('columnname'=>'value');