Korzystanie z
transactions
oznacza obsługę baz danych w celu bezpiecznego wprowadzania danych. Tak więc w Codeigniter piszemy wszystkie funkcje związane z bazą danych w Modelu nie w kontrolerze. . A w drugim kodzie (który nie działa) wskazałeś tam model.(utils
). Tak proste, że jestem pewien, że to nie zadziała. Ponieważ nie jest to wstawianie danych z równoległym modelem i kontrolerem. Transakcja powinna być zakodowana w Modelu(W mojej odpowiedzi napiszę w Modelu ).
Załaduj również te rzeczy
- Biblioteka baz danych
- Klasa modelu
- Pomocnik URL
- Sesja
Założenia
W kodzie użyłeś $data
i $test
jako tablica. Zakładam więc, że istnieją dwie tablice do wstawiania i aktualizowania danych.
Twoje zbiory danych
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$id = 007;
$test = array(
'title' => $title,
'name' => $name,
'date' => $date
);
Twój kod
$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;
}
Notatki
- Domyślnie Codeigniter uruchamia wszystkie transakcje w trybie ścisłym. Gdytryb ścisły jest włączony , jeśli uruchamiasz wiele grup transakcji, jeśli jedna grupa nie powiedzie się, wszystkie grupy zostaną wycofane. Jeśli tryb ścisły jest wyłączony , każda grupa jest traktowana niezależnie , co oznacza, że porażka jednej grupy nie wpłynie na żadną inną .