Mysql
 sql >> Database >  >> RDS >> Mysql

Transazioni Codeigniter

Utilizzo di transactions significa supportare i database per inserire i dati in modo sicuro. Quindi in Codeigniter scriviamo tutte le funzioni relative al database nel Model non in Controller. . E nel tuo secondo codice (che non funziona) hai puntato il modello lì.(utils ). Così semplice che sono sicuro che non funzionerà. Perché non è un inserimento dati con modello e controller in parallelo. La transazione deve essere codificata nel modello (scriverò in Model nella mia risposta ).

Carica anche questo materiale

  1. Libreria di database
  2. Classe modello
  3. Assistente URL
  4. Sessione

Ipotesi

Nel tuo codice hai usato $data e $test come matrice. Quindi presumo che ci siano due array per l'inserimento e l'aggiornamento dei dati.

I tuoi set di dati

$data = array(
   'title' => 'My title' ,
   'name' => 'My Name' ,
   'date' => 'My date'
);

$id = 007;
$test = array(
   'title' => $title,
   'name' => $name,
   'date' => $date
);

Il tuo codice

$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;
}

Note

  1. Per impostazione predefinita Codeigniter esegue tutte le transazioni in modalità rigorosa. Quando la modalità rigorosa è attiva , se stai eseguendo più gruppi di transazioni, se un gruppo ha esito negativo, verrà eseguito il rollback di tutti i gruppi. La modalità Ifstrict è disabilitata , ogni gruppo viene trattato in modo indipendente , significa che un fallimento di un gruppo non influirà su nessun altro .