web-dev-qa-db-ja.com

エラー:エントリの修正を更新するには、「set」メソッドを使用する必要がありますか?

PHPフレームワークとしてcodeigniterを使用しています。fromを送信してデータベースに投稿すると、このエラーが発生し続けます。

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
ddrossi93

あなたはこの例のようなことだけをする必要があります

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="" />

モデルでデータ配列を使用するのが最適です。フォーム検証の成功部分でモデル関数をロードします ライブラリ

1
Mr. ED

ここに到着したすべての人にとって、挿入クエリで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クエリの書き込みに失敗した結果です。

しかし、doをいつ使用するか

更新中または置換中に自動エスケープをバイパスする必要がある場合次に例を示します。

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

3番目のパラメーターは自動エスケープを無効にしました。これにより、アクティブレコードクエリを作成するときに必要な柔軟性が得られます。

1
qwertzman

私が通過していたときに私はこのエラーを受け取りました 間違った変数 挿入ステートメントに。

例えば ​​:

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

そこで、正しい変数$ aを渡すことで解決しました。

また、挿入配列が$a = array('columnname'=>'value');として正しくフォーマットされていることを確認してください

0

たとえば、データを挿入したいので、以下のようなコードを実行する必要があります-

My View File(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 

       }
    }

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
    }
   }

正常に動作します。確認してください。

0
Ritz