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 veux obtenir le dernier identifiant auto-incrémenté pour l'opération d'insertion comme valeur de retour de ma requête, mais j'ai quelques problèmes avec cela.
À 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 modèle intérieur:
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 n'obtiens rien comme le retour de l'add_post dans le modèle
mysql
codeigniter
Afghan Dev
la source
la source
db->insert_id()
revientfalse
après adb->trans_complete()
. Assurez-vous de bien avoir le vôtreinsert_id()
avant de terminer la transaction.Réponses:
Essaye ça
En cas d'inserts multiples, vous pouvez utiliser
la source
Une transaction n'est pas nécessaire ici, cela devrait suffire:
la source
la source
De la documentation :
Par conséquent, vous pouvez utiliser quelque chose comme ceci:
la source
parce que vous avez initié la transaction au cours de l'insertion de données donc, le premier contrôle la transaction terminée ou non. une fois que vous démarrez la transaction, elle doit être validée ou annulée en fonction du statut de la transaction;
dans ce qui précède, nous avons validé les données sur la transaction réussie même si vous obtenez l'horodatage
la source
Juste pour terminer cette rubrique: Si vous configurez votre table avec une clé primaire et une incrémentation automatique, vous pouvez omettre le processus d'incrémentation manuelle de l'ID.
Regardez cet exemple
Vous pouvez maintenant insérer des lignes
la source
la source
En utilisant le pilote PHP mysqli, vous ne pouvez pas obtenir le insert_id après votre validation.
La vraie solution est la suivante:
Source de la structure du code: https://codeigniter.com/user_guide/database/transactions.html#running-transactions-manually
la source
Tu dois utiliser
$lastId = $this->db->insert_id();
la source