PDO::beginTransaction은 트랜잭션을 시작합니다(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0).
bool PDO::beginTransaction ( void )
자동 커밋 모드를 끕니다. 자동 커밋 모드가 꺼지면 PDO 객체 인스턴스를 통해 데이터베이스에 적용된 변경 사항은 PDO::commit()가 호출되어 트랜잭션을 종료할 때까지 커밋되지 않습니다.
PDO::rollBack()을 호출하면 데이터베이스에 대한 변경 사항을 롤백하고 데이터베이스 연결을 자동 커밋 모드로 되돌립니다.
MySQL을 포함한 일부 데이터베이스는 DROP TABLE 또는 CREATE TABLE과 같은 DDL 문을 실행할 때 암시적 트랜잭션 커밋을 자동으로 수행합니다.
암시적으로 커밋하면 이 트랜잭션 범위 내에서 다른 변경 사항을 롤백할 수 없습니다.
다음 예에서는 트랜잭션을 시작하고 변경 사항을 롤백하기 전에 데이터베이스를 수정하는 두 개의 문을 실행합니다.
그러나 MySQL에서는 DROP TABLE 문이 자동으로 트랜잭션을 커밋하므로 이 트랜잭션의 변경 사항은 롤백되지 않습니다.
<?php/* 트랜잭션 시작 및 자동 제출 끄기*/$dbh->beginTransaction();/* 데이터베이스 구조 및 데이터 변경*/$sth = $dbh->exec("DROP TABLE Fruit");$ sth = $dbh->exec("UPDATE dessert SET name = 'hamburger'");/* 오류를 인식하고 변경 사항을 롤백합니다*/$dbh->rollBack();/* 이제 데이터베이스 연결이 자동 커밋 모드로 돌아왔습니다*/?>