簡體   English   中英

錯誤:您必須使用“set”方法來更新條目修復?

[英]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

我不太確定這意味着什么,從我看過的其他帖子中,每個人都說數據映射器需要為對象分配一個值。

由於我對這一切都很陌生,有人可以給我一個更好的解釋。

這是我的代碼,它說我有錯誤:

class Add_book extends CI_Model {

public function add_book($data){

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

}

}

?>

謝謝你。

你只需要做這樣的事情 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');

}

}

在視圖中,輸入將類似於示例

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

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

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

最好在模型中使用數據數組。 然后在表單驗證庫的成功部分加載模型函數

對於所有到達這里的人,您不必在插入查詢中使用 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 查詢時提供了必要的靈活性。

當我將錯誤的變量傳遞到插入語句時出現此錯誤。

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

所以我通過傳入正確的變量 $a 來解決它。

還要確保插入數組的格式正確為$a = array('columnname'=>'value');

例如我想插入數據,所以我必須做如下代碼 -

我的視圖文件(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
    }
   }

它工作正常,檢查它。

在你的模型中。

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 部分中(它就像代碼查看列的私有/公共)

問題出在您的模型中。 所以你必須檢查數組$data是否為空

像這樣 :

class Add_book extends CI_Model {

public function add_book($data){

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

}

}

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM