Maison >base de données >tutoriel mysql >Pourquoi les erreurs dans les fonctions externes au sein des transactions Codeigniter ne déclenchent-elles pas une restauration ?

Pourquoi les erreurs dans les fonctions externes au sein des transactions Codeigniter ne déclenchent-elles pas une restauration ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 04:53:30632parcourir

Why do errors in external functions within Codeigniter transactions not trigger a rollback?

Transactions Codeigniter

Codeigniter fournit un mécanisme transparent pour gérer les transactions de base de données grâce à ses fonctions intégrées. Cela permet aux développeurs d'exécuter plusieurs opérations de base de données en tant qu'unité de travail atomique unique.

Description du problème

Cependant, lors de l'utilisation de transactions dans Codeigniter, les développeurs peuvent rencontrer un problème courant où des erreurs se produisent dans les fonctions externes. appelés dans le bloc de transaction ne déclenchent pas de restauration.

Inclusion de fonctions externes

Pour résoudre ce problème, il est important de comprendre que les fonctions externes contenant des opérations de base de données doivent être encapsulées dans le modèle, et non le contrôleur. Cela garantit que les interactions avec la base de données sont exécutées dans le contexte de la transaction.

Exemple de code avec implémentation basée sur un modèle

Considérez l'exemple de code suivant :

<code class="php">// Model

class YourModel extends CI_Model {

    public function transactionExample($data, $id) {
        
        $this->db->trans_start();

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

        // Updating data
        $this->db->where('id', $id);
        $this->db->update('table_name', $test); 

        $this->db->trans_complete();

        /*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;
        }
    }
}</code>

Considérations clés

  • Par défaut, Codeigniter exécute toutes les transactions en mode strict. Lorsque le mode strict est activé, si un groupe de transactions échoue, tous les groupes seront annulés. Si le mode strict est désactivé, chaque groupe est traité indépendamment, ce qui signifie qu'un échec dans un groupe n'affectera pas les autres.
  • La fonction trans_complete() annule automatiquement la transaction si des erreurs se produisent. Alternativement, les développeurs peuvent gérer manuellement les erreurs à l'aide des fonctions trans_rollback() et trans_status().

Mises à jour de Codeigniter 4

Dans Codeigniter 4, les noms des fonctions liées aux transactions ont légèrement changé car suit :

Function Codeigniter 3 Codeigniter 4
Start Transaction trans_start() transBegin()
Complete Transaction trans_complete() transCommit()
Rollback Transaction trans_rollback() transRollback()
Transaction Status trans_status() transStatus()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn