我使用codeigniter作为我的PHP框架,当我提交发布到我的数据库时,我一直收到此错误。
You must use the "set" method to update an entry
我不确定这意味着什么,从我看过的其他帖子中,每个人都说数据映射器需要为该对象分配一个值。
由于我是这一切的新手,有人可以给我一个更好的解释。
这是我的代码,它说我有错误:
class Add_book extends CI_Model {
public function add_book($data){
$this->db->insert('ST_ITM', $data);
}
}
?>
谢谢。
答案 0 :(得分:1)
您需要执行类似此示例的操作
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="" />
最好在模型中使用数据数组。然后在表单验证Library
的成功部分加载模型函数答案 1 :(得分: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查询,例如在插入数组之前没有添加表名。
但先生,当做我们使用set?
如果您需要在更新或重播期间绕过自动转义 ,例如:
$this->db->set('last_login', 'NOW()', FALSE);
$this->db->update(DB_PREFIX .'user', array('login_attempts' => 0));
第三个参数禁用自动转义。这为我们在编写Active Record查询时提供了必要的灵活性。
答案 2 :(得分:0)
例如我想插入数据,所以我必须执行如下代码 -
我的浏览文件(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
}
}
工作正常,检查一下。
答案 3 :(得分:0)
当我将错误的变量传递给insert语句时,我收到了此错误。
例如:
function($a){
$this->db->insert($aa); <-- error !!
}
所以我通过传递正确的变量解决了它,这是$ a。
还要确保您的插入数组格式正确为$a = array('columnname'=>'value');
答案 4 :(得分:0)
在您的模型中。
public function SetFoo($bar) {
$data = [
'YourColumnName' => 'Yes'
];
// Using Query Builder
$this->set($data);
$this->where('id',$bar);
$this->update();
}
如果您不将以下模型添加到模型顶部,则会抛出上述错误
protected $allowedFields = ['YourColumnName'];
这些列可以存在于模型中,但除非使用setupdate来允许,否则不能使用set update来访问这些列(对于列中的代码来说,列类似于私有/公共)
答案 5 :(得分:0)
问题出在您的模型中。
所以你必须检查数组 $data
是否为空
像这样:
class Add_book extends CI_Model {
public function add_book($data){
if ( $data != null)
$this->db->insert('ST_ITM', $data);
}
}
?>