Utilisation de
transactions
signifie prendre en charge les bases de données pour insérer des données en toute sécurité. Donc, dans Codeigniter, nous écrivons toutes les fonctions liées à la base de données dans le Modèle pas dans le contrôleur. . Et dans votre deuxième code (qui ne fonctionne pas), vous avez pointé le modèle dessus. (utils
). Si simple, je suis sûr que cela ne fonctionnera pas. Parce que ce n'est pas une insertion de données avec un modèle et un contrôleur parallèles. La transaction doit être codée dans le modèle (j'écrirai dans le modèle dans ma réponse ).
Chargez également ces éléments
- Bibliothèque de bases de données
- Classe de modèle
- Assistant d'URL
- Session
Hypothèses
Dans votre code, vous avez utilisé $data
et $test
comme tableau. Je suppose donc qu'il existe deux tableaux pour insérer et mettre à jour des données.
Vos ensembles de données
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$id = 007;
$test = array(
'title' => $title,
'name' => $name,
'date' => $date
);
Votre code
$this->db->trans_start(); # Starting Transaction
$this->db->trans_strict(FALSE); # See Note 01. If you wish can remove as well
$this->db->insert('table_name', $data); # Inserting data
# Updating data
$this->db->where('id', $id);
$this->db->update('table_name', $test);
$this->db->trans_complete(); # Completing transaction
/*Optional*/
if ($this->db->trans_status() === FALSE) {
# Something went wrong.
$this->db->trans_rollback();
return FALSE;
}
else {
# Everything is Perfect.
# Committing data to the database.
$this->db->trans_commit();
return TRUE;
}
Remarques
- Par défaut, Codeigniter exécute toutes les transactions en mode strict. Lorsque le mode strict est activé , si vous exécutez plusieurs groupes de transactions, si un groupe échoue, tous les groupes seront annulés. Si le mode strict est désactivé , chaque groupe est traité indépendamment , ce qui signifie qu'une défaillance d'un groupe n'affectera pas les autres .