Använda
transactions
innebär att stödja databaser för att infoga data säkert. Så i Codeigniter skriver vi alla databasrelaterade funktioner i modellen inte i Controller. . Och i din andra kod (som inte fungerar) har du pekat på modellen där.(utils
). Så enkelt att jag är säker på att detta inte kommer att fungera. Eftersom det inte är en infogningsdata med modell och styrenhet parallell. Transaktionen ska kodas i modellen (Jag kommer att skriva i modellen i mitt svar ).
Ladda även in det här
- Databasbibliotek
- Modellklass
- Webbadresshjälp
- Session
Antaganden
I din kod har du använt $data
och $test
som array. Så jag antar att det finns två arrayer för att infoga och uppdatera data.
Dina datamängder
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$id = 007;
$test = array(
'title' => $title,
'name' => $name,
'date' => $date
);
Din 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;
}
Anteckningar
- Som standard kör Codeigniter alla transaktioner i strikt läge. Närstrikt läge är aktiverat , om du kör flera grupper av transaktioner, om en grupp misslyckas kommer alla grupper att återställas. Ifstrict-läget är inaktiverat , varje grupp behandlas oberoende , vilket betyder att ett misslyckande för en grupp inte kommer att påverka någon annan .