错误:您必须使用“set”方法更新入口修复?

时间:2015-05-21 16:12:21

标签: php codeigniter codeigniter-datamapper

我使用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);

}

}

?>

谢谢。

6 个答案:

答案 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);

}

}

?>