> 데이터 베이스 > MySQL 튜토리얼 > Codeigniter 트랜잭션 내의 외부 기능 오류가 롤백을 트리거하지 않는 이유는 무엇입니까?

Codeigniter 트랜잭션 내의 외부 기능 오류가 롤백을 트리거하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-03 04:53:30
원래의
667명이 탐색했습니다.

Why do errors in external functions within Codeigniter transactions not trigger a rollback?

Codeigniter 트랜잭션

Codeigniter는 내장 기능을 통해 데이터베이스 트랜잭션을 처리하기 위한 원활한 메커니즘을 제공합니다. 이를 통해 개발자는 여러 데이터베이스 작업을 단일 작업 단위로 실행할 수 있습니다.

문제 설명

그러나 Codeigniter에서 트랜잭션을 사용할 때 개발자는 외부 기능에서 오류가 발생하는 일반적인 문제에 직면할 수 있습니다. 트랜잭션 블록 내에서 호출되면 롤백이 트리거되지 않습니다.

외부 함수 포함

이 문제를 해결하려면 데이터베이스 작업이 포함된 외부 함수가 모델 내에 캡슐화되어야 하는 것이 아니라 모델 내에 캡슐화되어야 한다는 점을 이해하는 것이 중요합니다. 컨트롤러. 이렇게 하면 데이터베이스 상호 작용이 트랜잭션 컨텍스트 내에서 실행됩니다.

모델 기반 구현을 사용한 코드 샘플

다음 코드 예를 고려하세요.

<code class="php">// Model

class YourModel extends CI_Model {

    public function transactionExample($data, $id) {
        
        $this->db->trans_start();

        $this->db->insert('table_name', $data);

        // Updating data
        $this->db->where('id', $id);
        $this->db->update('table_name', $test); 

        $this->db->trans_complete();

        /*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;
        }
    }
}</code>
로그인 후 복사

주요 고려 사항

  • 기본적으로 Codeigniter는 모든 트랜잭션을 엄격 모드로 실행합니다. 엄격 모드가 활성화되면 트랜잭션 그룹이 실패하면 모든 그룹이 롤백됩니다. 엄격 모드가 비활성화되면 각 그룹은 독립적으로 처리됩니다. 즉, 한 그룹의 실패가 다른 그룹에 영향을 미치지 않습니다.
  • 오류가 발생하면 trans_complete() 함수가 자동으로 트랜잭션을 롤백합니다. 또는 개발자가 trans_rollback() 및 trans_status() 함수를 사용하여 오류를 수동으로 처리할 수 있습니다.

Codeigniter 4 업데이트

Codeigniter 4에서는 트랜잭션 관련 함수 이름이 다음과 같이 약간 변경되었습니다. 다음:

Function Codeigniter 3 Codeigniter 4
Start Transaction trans_start() transBegin()
Complete Transaction trans_complete() transCommit()
Rollback Transaction trans_rollback() transRollback()
Transaction Status trans_status() transStatus()

위 내용은 Codeigniter 트랜잭션 내의 외부 기능 오류가 롤백을 트리거하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿