2012-06-05 2 views
1

이 같은 거래를 할 거라고는 :MySQL의 거래 직선 MySQL의 스크립트에서 문제

START TRANSACTION; 
SELECT @A:=SUM(salary) FROM table1 WHERE type=1; 
UPDATE table2 SET [email protected] WHERE type=1; 
COMMIT; 

내가 거래 PDO에서 작동하는 방식에 대해 조금 혼란 스러워요. beginTransaction()과 commit() 메소드가있는 것처럼 보입니다. 그래서 staright SQL에서 이러한 편리한 래퍼를 사용할 수 있을지 모르겠습니다. 아니면 그들이 문 뒤에서 좀 더 일을하고 있습니까?

다른 말로하면 - 아래의 예는 본질적으로 동일합니까?

예 1 :

$dbh->exec('START TRANSACTION'); 
//...do some db work here... 
$dbh->exec("COMMIT"); 

예 2 :

$dbh->beginTransaction(); 
//...do some db work here... 
$dbh->commit(); 

답변

2

기능 현명 (모두 동일하지만, 들어 BeginTransaction() 커밋)는 모든 데이터베이스와의 호환성을 보장하고있을 수도 PDO 기능입니다 START TRANSACTION에서 오류가 발생할 수있는 데이터베이스가 있지만 PDO 방법은 항상 작동합니다.

+1

Informix는 'BEGIN'또는 'BEGIN WORK'을 사용하여 트랜잭션을 시작하고 구문 오류로 'START TRANSACTION'을 거부합니다. 내 관찰에 –

+0

$ dbh-> inTransaction(); example1과 같이 트랜잭션을 사용할 때는 항상 0을 표시하고 example2처럼 사용하면 1을 표시합니다. 기묘한. – Stann