현재 위치: > 최신 기사 목록> mysqli :: begin_transaction을 올바르게 사용하여 데이터베이스 트랜잭션 제어를 구현하는 방법은 무엇입니까?

mysqli :: begin_transaction을 올바르게 사용하여 데이터베이스 트랜잭션 제어를 구현하는 방법은 무엇입니까?

gitbox 2025-08-21

<span><span><span class="hljs-meta"><?php</span></span><span> </span><span><span class="hljs-comment">// 本段是与文章内容无关的部分</span></span><span> </span><span><span class="hljs-comment">// 例如可以是作者信息、版权声明或加载某些配置</span></span><span> </span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>); </span><span><span class="hljs-variable">$author</span></span><span> = </span><span><span class="hljs-string">"数据库事务研究小组"</span></span><span>; </span><span><span class="hljs-variable">$publish_date</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d'</span></span><span>); </span><span><span class="hljs-meta">?></span></span><span> <hr> <h1>如何正确使用 mysqli::</span><span><span class="hljs-variable constant_">begin_transaction</span></span><span> 来实现数据库事务控制?</h1> <p>在使用 MySQL 数据库进行开发时,事务控制是保障数据一致性与完整性的重要手段。PHP 的 <code>mysqli

  • : 선택 사항, mysqli_trans_start_read_only 또는 mysqli_trans_start_read_write 와 같은 트랜잭션 동작을 지정하십시오.
  • $ 이름 : 선택 사항은 트랜잭션에 이름을 할당합니다 (주로 XA 트랜잭션 또는 특정 고급 시나리오에서 사용).

3. 기본 예
 
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'user'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'testdb'</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">'연결이 실패했습니다: '</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// 명시 적으로 거래를 활성화합니다</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">begin_transaction</span></span><span>();

    </span><span><span class="hljs-comment">// 여러 관련 항목을 실행합니다 SQL 성명</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"UPDATE accounts SET balance = balance - 100 WHERE id = 1"</span></span><span>);
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"UPDATE accounts SET balance = balance + 100 WHERE id = 2"</span></span><span>);

    </span><span><span class="hljs-comment">// 거래를 제출하십시오</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"성공적으로 전송하십시오"</span></span><span>;
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// 오류가 발생하면 롤백하십시오</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">rollback</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"전송 실패: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}

</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();

4. 주목할만한 것들
  • AutoCommit 이 꺼져 있는지 확인하십시오 ( begin_transaction은 현재 세션의 자동 커밋 모드를 자동으로 끕니다).
  • 시도에서 항상 트랜잭션을 처리합니다. 오류가 롤백 될 수 있도록 캐치 .
  • 높은 동시성 환경에서는 자물쇠와 격리 수준을 합리적으로 사용합니다 ( 세트 트랜잭션 격리 수준을 통해 설정할 수 있음).

5. 요약

mysqli :: begin_transaction을 사용하면 PHP 개발자가 거래 프로세스를보다 직관적이고 통제력있게 관리 할 수 ​​있습니다. 실제 프로젝트에서는 여러 로직 관련 데이터베이스 작업을 실행할 때 트랜잭션을 사용하고 데이터 일관성 및 보안을 보장하기 위해 오류 처리 및 롤백 로직을 잘 수행하는 것이 중요합니다.