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
- Libreria di database
- Classe modello
- Assistente URL
- 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
- 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 .