CodeIgniter-Transaktionen
CodeIgniter-Transaktionen bieten einen Mechanismus zum Ausführen mehrerer Datenbankoperationen als Teil einer einzelnen Transaktion. Dadurch wird sichergestellt, dass alle Vorgänge erfolgreich abgeschlossen werden oder alle zurückgesetzt werden, wenn ein Fehler auftritt.
In Ihrem Szenario rufen Sie externe Funktionen innerhalb des Transaktionsblocks auf, aber wenn bei diesen Funktionen Fehler auftreten, wird die Transaktion nicht ausgeführt wie gewünscht zurückgerollt. Dies liegt daran, dass Ihre externen Funktionen keinen Zugriff auf den Transaktionsstatus haben.
Eine Lösung besteht darin, Fehler in Ihren externen Funktionen zu erkennen und bei Bedarf manuell ein Rollback durchzuführen. Zum Beispiel:
<code class="php">try { $this->db->trans_start(); $this->utils->insert_function($data); $this->utils->update_function2($test); $this->db->trans_complete(); } catch (Exception $e) { $this->db->trans_rollback(); }</code>
Eine robustere Lösung besteht jedoch darin, Ihre Datenbankoperationen in einzelnen Modellmethoden zu kapseln. Dies ermöglicht eine bessere Organisation und eine zentrale Fehlerbehandlung. In diesem Fall könnten Sie Ihre Funktionen insert_function und update_function2 in ein Modell verschieben und Transaktionen innerhalb der Modellmethoden verarbeiten:
TransactionExampleModel.php
<code class="php">class TransactionExampleModel extends CI_Model { public function insertData($data) { $this->db->trans_start(); $this->db->insert('table_name', $data); if ($this->db->trans_status() === FALSE) { $this->db->trans_rollback(); return FALSE; } $this->db->trans_commit(); return TRUE; } public function updateData($data, $id) { $this->db->trans_start(); $this->db->where('id', $id); $this->db->update('table_name', $data); if ($this->db->trans_status() === FALSE) { $this->db->trans_rollback(); return FALSE; } $this->db->trans_commit(); return TRUE; } }</code>
Dann in Mit Ihrem Controller können Sie die Modellmethoden innerhalb des Transaktionsblocks aufrufen:
<code class="php">$this->load->model('TransactionExampleModel'); $this->db->trans_start(); $result1 = $this->TransactionExampleModel->insertData($data); $result2 = $this->TransactionExampleModel->updateData($test, $id); $this->db->trans_complete();</code>
Dieser Ansatz bietet eine zentralisiertere und robustere Möglichkeit, Transaktionen in Ihrer CodeIgniter-Anwendung zu verwalten.
Das obige ist der detaillierte Inhalt vonWie kann ein Transaktions-Rollback in CodeIgniter beim Aufruf externer Funktionen sichergestellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!