Error: You must use the "set" method to update an entry fix?

Error: You must use the "set" method to update an entry fix?

我正在使用 codeigniter 作为我的 PHP 框架,当我将 from to post 提交到我的数据库时,我一直收到此错误。

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

我不太确定这是什么意思,从我看过的其他 post 来看,每个人都说数据映射器需要为对象分配一个值。

由于我是新手,谁能给我一个更好的解释。

这是我的代码,它说我有错误:

class Add_book extends CI_Model {

public function add_book($data){

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

}

}

?>

谢谢。

您需要做类似这样的事情 仅示例

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

对于所有来到这里的人,您不必在插入查询中使用 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 查询的结果,例如未在插入数组前添加 table 名称。

但是先生,当我们使用set?

当您需要在更新或替换过程中绕过自动转义 例如:

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

禁用第三个参数auto-escaping。这为我们在编写 Active Record 查询时提供了必要的灵活性。

例如,我想插入数据,所以我必须执行如下代码 -

我的查看文件(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
    }
   }

运行良好,检查一下。

当我将 错误的变量 传递到插入语句时出现此错误。

例如:

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

所以我通过传递正确的变量来解决它,它是 $a.

还要确保插入数组的格式正确为 $a = array('columnname'=>'value');

在你的模型中。

public function SetFoo($bar) {
    $data = [
        'YourColumnName'     => 'Yes'
    ];

    // Using Query Builder
    $this->set($data);
    $this->where('id',$bar);
    $this->update();
}

如果您不在模型顶部添加以下内容,将会引发上述错误

protected $allowedFields = ['YourColumnName'];

这些列可以存在于模型中,但不能使用 set update 访问,除非它在 ​​allowedfields 部分中(它类似于 private/public 代码以查看该列)

问题出在你的模型上。 所以你必须检查数组 $data 是否为空

像这样:

class Add_book extends CI_Model {

public function add_book($data){

    if ( $data != null)
        $this->db->insert('ST_ITM', $data);

}

}

?>