Pomocí
transactions
prostředky podporují databáze pro bezpečné vkládání dat. Takže v Codeigniter zapisujeme všechny funkce související s databází v Modelu ne v ovladači. . A ve vašem druhém kódu (který nefunguje) máte namířený model. (utils
). Tak jednoduché, jsem si jistý, že to nebude fungovat. Protože nejde o vkládání dat s paralelním modelem a ovladačem. Transakce by měla být zakódována v modelu (ve své odpovědi napíšu model ).
Načtěte také tento materiál
- Knihovna databáze
- Modelová třída
- Pomocník adresy URL
- Relace
Předpoklady
Ve svém kódu jste použili $data
a $test
jako pole. Předpokládám tedy, že existují dvě pole pro vkládání a aktualizaci dat.
Vaše soubory dat
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$id = 007;
$test = array(
'title' => $title,
'name' => $name,
'date' => $date
);
Váš kód
$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;
}
Poznámky
- Ve výchozím nastavení spouští Codeigniter všechny transakce v přísném režimu. Kdyžje povolen přísný režim , pokud spouštíte více skupin transakcí, pokud jedna skupina selže, všechny skupiny budou vráceny zpět. Režim Ifstrict je deaktivován , každá skupina je léčena nezávisle , to znamená, že selhání jedné skupiny neovlivní ostatní .