web-dev-qa-db-fra.com

comment obtenir la dernière insertion id après requête d'insertion dans l'enregistrement actif codeigniter

J'ai une requête d'insertion (style d'enregistrement actif) utilisée pour insérer les champs de formulaire dans une table MySQL. Je souhaite obtenir le dernier identifiant auto-incrémenté pour l'opération d'insertion en tant que valeur de retour de ma requête, mais cela me pose quelques problèmes.

À l'intérieur du contrôleur:

function add_post(){
    $post_data = array(
        'id'            => '',
        'user_id'   =>  '11330',
        'content'   =>  $this->input->post('poster_textarea'),
        'date_time' => date("Y-m-d H:i:s"),
        'status'        =>  '1'
    );
    return $this->blog_model->add_post($post_data);
}

Et à l'intérieur du modèle:

function add_post($post_data){
    $this->db->trans_start();
    $this->db->insert('posts',$post_data);
    $this->db->trans_complete();
    return $this->db->insert_id();
}

Je ne reçois rien comme le retour de add_post dans le modèle

147
Reza Saberi

Essaye ça

function add_post($post_data){
   $this->db->insert('posts', $post_data);
   $insert_id = $this->db->insert_id();

   return  $insert_id;
}

En cas d'insertions multiples, vous pouvez utiliser

$this->db->trans_start();
$this->db->trans_complete();
248
Sudz

Une transaction n'est pas nécessaire ici, cela devrait suffire:

function add_post($post_data) {
    $this->db->insert('posts',$post_data);
    return $this->db->insert_id();
}
62
Crowlix
$id = $this->db->insert_id();
29
Simon Carlson

De la documentation :

$ this-> db-> insert_id ()

Le numéro d'ID d'insertion lors de l'insertion de bases de données.

Par conséquent, vous pouvez utiliser quelque chose comme ceci:

$lastid = $this->db->insert_id();
10
Md.Jewel Mia

Pour compléter cette rubrique: Si vous configurez votre table avec une clé primaire et une incrémentation automatique, vous pouvez ignorer le processus d’incrémentation manuelle de l’ID.

Découvrez cet exemple

if (!$CI->db->table_exists(db_prefix() . 'my_table_name')) {
    $CI->db->query('CREATE TABLE `' . db_prefix() . "my_table_name` (
  `serviceid` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `hash` varchar(32) NOT NULL,
  `url` varchar(120) NOT NULL,
  `datecreated` datetime NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=" . $CI->db->char_set . ';');

Maintenant, vous pouvez insérer des lignes

$this->db->insert(db_prefix(). 'my_table_name', [
            'name'         => $data['name'],
            'hash'            => app_generate_hash(),
            'url'     => $data['url'],
            'datecreated'     => date('Y-m-d H:i:s'),
            'active'          => $data['active']
        ]);
0
Fabus

parce que vous avez initié la transaction sur l'insertion de données, donc, vérifiez d'abord si la transaction est terminée ou non. une fois que vous démarrez la transaction, celle-ci doit être validée ou annulée en fonction du statut de la transaction;

function add_post($post_data){
  $this->db->trans_begin() 
  $this->db->insert('posts',$post_data);
  $this->db->trans_complete();
  if ($this->db->trans_status() === FALSE){
    $this->db->trans_rollback();
    return 0;
  }else{
    $this->db->trans_commit();
    return $this->db->insert_id();
  }
}``

dans ce qui précède, nous avons validé les données relatives à la transaction réussie même si vous obtenez l'horodatage

0
KISHOR PANT