현재 위치: > 최신 기사 목록> PDO :: 시작 추출 및 자동 제출 모드 간의 관계 분석

PDO :: 시작 추출 및 자동 제출 모드 간의 관계 분석

gitbox 2025-05-28

트랜잭션은 데이터베이스 작업에 PHP의 PDO (PHP Data Objects)를 사용할 때 데이터 일관성 및 무결성을 보장하는 주요 메커니즘 중 하나입니다. pdo :: begintransaction ()은 트랜잭션을 시작하는 일반적인 방법입니다. 많은 개발자들이 초보자가 언제인지 궁금해 할 것입니다.이 기능은 소위 "자동 커밋 모드"와 어떤 관련이 있습니까? 이 기사에서는 두 가지 깊이의 연결을 탐색하고 예제를 통해 자세히 분석합니다.

자동 제출 모드 소개

대부분의 데이터베이스 (예 : MySQL)에서 기본적으로 독립적으로 실행 된 각각의 SQL 문은 독립 트랜잭션으로 실행되며 자동으로 커밋됩니다. 이 동작을 자동 커밋이라고합니다. 다시 말해, 지정적으로 트랜잭션을 시작하면 삽입 , 업데이트 또는 삭제 명령문을 실행 한 후 데이터베이스가 즉시 작업 결과를 저장합니다.

pdo :: begintransaction () 동작

pdo :: begintransaction ()을 호출하면 pdo는 현재 자동 커뮤니티 모드를 자동으로 끄고 새 트랜잭션을 시작합니다. 현재 데이터베이스에 대한 모든 후속 쓰기 작업 (예 : 삽입 , 업데이트 , 삭제 )은 pdo :: commit () 또는 pdo :: rollback ()을 명시 적으로 호출 할 때까지 즉시 제출되지 않습니다. 다시 말해,이 기능의 기능은 "자동 제출을 끄고 수동 제출을 활성화하는 것"입니다.

자동 제출 패턴과의 핵심 관계는 다음과 같습니다.

  • 시작 transaction () 이 호출되지 않으면 : 각 문이 실행 된 직후 제출 (자동 제출 모드가 활성화 됨).

  • 호출 후 시작 transaction () : 자동 제출 모드를 끄고 트랜잭션 제어 상태를 입력하십시오.

트랜잭션이 실행 된 후 ( Commit () 또는 Rollback () )가 실행 된 후 PDO는 일반적으로 자동 커밋 모드에 대한 연결을 자동으로 복원하여 후속 문이 기본 동작으로 계속 실행될 수 있도록합니다.

샘플 데모

 <?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 거래를 시작하십시오,자동 제출이 닫힙니다
    $pdo->beginTransaction();

    // 첫 번째 레코드를 삽입하십시오
    $pdo->exec("INSERT INTO users (name, email) VALUES ('Alice', '[email protected]')");

    // 두 번째 레코드를 삽입하십시오
    $pdo->exec("INSERT INTO users (name, email) VALUES ('Bob', '[email protected]')");

    // 거래를 제출하십시오
    $pdo->commit();
    echo "데이터가 성공적으로 작성되었습니다。";

} catch (Exception $e) {
    $pdo->rollBack(); // 예외가있는 경우,트랜잭션을 롤백하십시오
    echo "거래에 실패했습니다:" . $e->getMessage();
}
?>

위의 코드에서 삽입 된 레코드는 실제로 Commit ()가 성공적으로 호출 된 후에 만 ​​데이터베이스에 작성됩니다. 중간에 예외가 발생하면 Rollback ()을 호출하면 모든 커밋되지 않은 변경 사항이 취소됩니다. 전체 프로세스는 자동 제출 모드가 꺼질 때 발생합니다.

거래 기능을 호출 한 후 행동 관찰

SQL 문을 통해 자동 제출 패턴의 변경 사항을 관찰 할 수 있습니다.

 $pdo->query("SELECT @@autocommit")->fetchColumn(); // 반품 1 켜져 있습니다,0 가까운 것을 나타냅니다

시작 transaction ()을 실행 한 후 쿼리를 실행하면 0을 반환 할 수 있습니다. 이는 자동 제출이 닫혀 있음을 나타냅니다. 이 상태는 거래가 끝날 때까지 지속됩니다.

pdo :: stattribute의 차이 (pdo :: attrocommit, false)

일부 드라이버에서는 pdo :: setattribute ()를 사용하여 자동 커밋 상태를 설정할 수 있습니다.

 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false);

그러나 이것은 두 가지 이유로 권장되지 않습니다.

  1. 모든 PDO 운전자 가이 속성을 지원하는 것은 아니며 부적절한 사용으로 인해 호환성 문제가 발생할 수 있습니다.

  2. 표준 트랜잭션 API (예 : begintransaction () , commit () , rollback () )을 사용하여 트랜잭션 상태를 관리하여 크로스 플랫폼 일관성을 보장하는 것이 좋습니다.

요약

  • pdo :: begintransaction () 의 기능은 자동 커밋 모드를 끄고 수동으로 트랜잭션을 관리하는 것입니다.

  • 트랜잭션이 사용되지 않을 때는 자동 커밋 모드가 기본적으로 활성화됩니다.

  • Commit () 또는 Rollback () 이 호출되면 트랜잭션 종료 및 자동 커밋이 재개됩니다.

  • 트랜잭션을 사용하면 데이터 운영의 보안 및 일관성을 향상시킬 수 있습니다. 특히 여러 쓰기 작업이 "모든 성공 또는 모든 실패"해야하는 시나리오에서.

시작 transaction () 과 자동 제출 간의 관계를 이해하면보다 강력하고 제어 가능한 데이터베이스 작동 코드를 작성하는 데 도움이됩니다. 거래는 성능의 적이 아니라 데이터 정확성의 수호 성인이라는 것을 기억하십시오.