Wie Sie beobachtet haben, erfordert der standardmäßige Transaktionsverarbeitungsmechanismus in CodeIgniter ein manuelles Rollback, falls innerhalb externer Funktionen Fehler auftreten. Um dieses Problem anzugehen, wird ein umfassenderer Ansatz empfohlen.
1. Kapselung der Transaktionsverarbeitung in einem Modell:
Gemäß der Architektur von CodeIgniter sollten Datenbankoperationen innerhalb der Model-Klasse gekapselt werden. Dadurch wird eine ordnungsgemäße Datenverarbeitung und Model-View-Controller (MVC)-Trennung gewährleistet. Externe Funktionen sollten nur als Hilfsmittel oder Helfer dienen.
2. Fehlerabfangen in externen Funktionen:
Implementieren Sie innerhalb externer Funktionen wie insert_function und update_function2 die Fehlerbehandlung und geben Sie FALSE zurück, wenn ein Fehler auftritt. Dadurch wird ein automatisches Rollback ausgelöst, wenn die Transaktion abgeschlossen ist.
Beispiel:
public function insert_function($data)
{
if (!$this->db->insert('transactions_exercices', $data)) {
return FALSE;
}
return TRUE;
}
3. Ausnahmebehandlung im Controller:
Behandeln Sie im Controller, in dem die Transaktion initiiert wird, alle Ausnahmen, die während der Transaktion auftreten können, und führen Sie erforderliche Aktionen durch, z. B. das Anzeigen von Fehlermeldungen oder das Protokollieren von Ausnahmen.
Beispiel:
try {
$this->db->trans_start();
// Call external functions
$result1 = $this->utils->insert_function($data);
$result2 = $this->utils->update_function2($test);
if ($result1 === FALSE || $result2 === FALSE) {
throw new Exception('An error occurred.');
}
$this->db->trans_complete();
} catch (Exception $e) {
$this->db->trans_rollback();
// Handle the exception...
}
Hinweis: Stellen Sie sicher, dass der strikte Modus in Ihrer Transaktionskonfiguration deaktiviert ist, um unabhängige Transaktionsgruppen zuzulassen, wie in der bereitgestellten Lösung erwähnt.
Alternative Lösung:
Alternativ können Sie eine benutzerdefinierte Transaktionsklasse definieren, die das Fehlerabfangen und das automatische Rollback übernimmt. Dieser Ansatz kann eine zentrale Fehlerbehandlung für alle Transaktionen ermöglichen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3