web-dev-qa-db-fra.com

Erreur: vous devez utiliser la méthode "set" pour mettre à jour un correctif d'entrée?

J'utilise codeigniter comme mon PHP, et je continue à recevoir cette erreur lorsque je soumets mon from pour le publier dans ma base de données.

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

Je ne sais pas exactement ce que cela signifie, d'après les autres articles que j'ai consultés, tout le monde dit que le datamapper doit avoir une valeur assignée à l'objet.

Étant donné que je suis nouveau dans tout cela, quelqu'un pourrait-il me donner une meilleure explication.

Voici mon code où il est dit que j'ai l'erreur:

class Add_book extends CI_Model {

public function add_book($data){

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

}

}

?>

Je vous remercie.

6
ddrossi93

Vous devez faire quelque chose comme ceci Exemple uniquement

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');

}

}

Sur la vue, l'entrée serait comme un exemple

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

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

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

Il est préférable d'utiliser un tableau de données dans le modèle. puis charger la fonction de modèle dans le succès de la validation du formulaire Bibliothèque

1
Mr. ED

Pour tous ceux qui arrivent ici, vous n'avez PAS à utiliser set dans vos requêtes d'insertion:

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')

L'erreur est le résultat de données d'insertion mal construites (doit être un tableau) ou de l'échec de l'écriture de la requête Active Record correcte, comme par exemple, l'ajout du nom de la table avant le tableau d'insertion.

Mais monsieur, quand faire nous utilisons set?

Lorsque vous devez contourner l'échappement automatique lors des mises à jour ou des remplacements par exemple:

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

Le troisième paramètre a désactivé l'échappement automatique. Cela nous donne la flexibilité nécessaire lors de l'écriture de requêtes Active Record.

1
qwertzman

J'ai eu cette erreur quand je passais mauvaise variable dans l'instruction d'insertion.

Par exemple :

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

Je l'ai donc résolu en passant la bonne variable, qui est $ a.

Assurez-vous également que votre tableau d'insertion est correctement formaté en $a = array('columnname'=>'value');

0
Valentino Pereira

Par exemple, je veux insérer des données, donc je dois faire du code comme ci-dessous -

Mon fichier d'affichage (Login_form.php)

    <label>Username:</label> <input type="text" name="username" value="">

    <label>Password:</label> <input type="password" name="password" value="">

Mon fichier modèle (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 

       }
    }

Fichier contrôleur (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
    }
   }

Cela fonctionne bien, vérifiez-le.

0
Ritz