Maison  >  Article  >  base de données  >  Comment garantir l'annulation des transactions dans CodeIgniter lors de l'appel de fonctions externes ?

Comment garantir l'annulation des transactions dans CodeIgniter lors de l'appel de fonctions externes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 05:55:30192parcourir

How to Ensure Transaction Rollback in CodeIgniter When Calling External Functions?

Transactions CodeIgniter

Les transactions CodeIgniter fournissent un mécanisme permettant d'exécuter plusieurs opérations de base de données dans le cadre d'une seule transaction. Cela garantit que toutes les opérations sont terminées avec succès ou qu'elles sont toutes annulées si une erreur se produit.

Dans votre scénario, vous appelez des fonctions externes dans le bloc de transaction, mais si ces fonctions rencontrent des erreurs, la transaction ne sera pas annulé comme vous le souhaitez. En effet, vos fonctions externes n'ont pas accès à l'état de la transaction.

Une solution consiste à détecter les erreurs dans vos fonctions externes et à effectuer manuellement une restauration si nécessaire. Par exemple :

<code class="php">try {
    $this->db->trans_start();
    $this->utils->insert_function($data);
    $this->utils->update_function2($test);
    $this->db->trans_complete();
} catch (Exception $e) {
    $this->db->trans_rollback();
}</code>

Cependant, une solution plus robuste consiste à encapsuler vos opérations de base de données dans des méthodes de modèle individuelles. Cela permet une meilleure organisation et une gestion centralisée des erreurs. Dans ce cas, vous pouvez déplacer vos fonctions insert_function et update_function2 dans un modèle et gérer les transactions dans les méthodes du modèle :

TransactionExampleModel.php

<code class="php">class TransactionExampleModel extends CI_Model {
    public function insertData($data) {
        $this->db->trans_start();
        $this->db->insert('table_name', $data);
        if ($this->db->trans_status() === FALSE) {
            $this->db->trans_rollback();
            return FALSE;
        }
        $this->db->trans_commit();
        return TRUE;
    }

    public function updateData($data, $id) {
        $this->db->trans_start();
        $this->db->where('id', $id);
        $this->db->update('table_name', $data);
        if ($this->db->trans_status() === FALSE) {
            $this->db->trans_rollback();
            return FALSE;
        }
        $this->db->trans_commit();
        return TRUE;
    }
}</code>

Ensuite, dans votre contrôleur, vous pouvez appeler les méthodes de modèle dans le bloc de transaction :

<code class="php">$this->load->model('TransactionExampleModel');

$this->db->trans_start();
$result1 = $this->TransactionExampleModel->insertData($data);
$result2 = $this->TransactionExampleModel->updateData($test, $id);
$this->db->trans_complete();</code>

Cette approche fournit un moyen plus centralisé et plus robuste de gérer les transactions dans votre application CodeIgniter.

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