2014-04-12 3 views
0
$myServer='127.0.0.1'; 
$myDB='karma'; 
$myUser='root'; 
$myPass='wilian'; 


try { 
    $connStr = "mysql:host=".$myServer.";dbname=".$myDB; 
    $dbh = new PDO($connStr,$myUser,$myPass); 
} catch (Exception $e) { 
    die("Unable to connect: " . $e->getMessage()); 
} 

try { 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $dbh->beginTransaction(); 
    $dbh->query("insert into mst_goods_category (id, GOODS_CATEGORY_CODE, GOODS_CATEGORY_NAME, ACTIVE_FLAG, CREATE_DATE, CREATE_TIME, CREATE_USER) values (12, '012', '333', 'Y', '20140702', '00:00:00', 'admin')"); 
    $dbh->query("insert into mst_goods_category (id, GOODS_CATEGORY_CODE, GOODS_CATEGORY_NAME, ACTIVE_FLAG, CREATE_DATE, CREATE_TIME, CREATE_USER) values (13, '012', '333', 'Y', '20140702', '00:00:00', 'admin')"); 
    $dbh->commit(); 

} catch (PDOException $e) { 
    $dbh->rollBack(); 
    throw $e; 
} 

두 번째 쿼리가 고유 제약 때문에 오류입니다. $ e가 표시되지만 롤백하지 않습니다. 어느 것이 잘못 되었습니까?PDO 롤백이 작동하지 않습니다.

+4

왜 롤백해야한다고 생각합니까? –

+1

뭔가 잘못 된 경우에만 롤백해야합니다. – AdRock

+0

오 죄송합니다. 고유 제약 조건 –

답변

0

대부분 트랜잭션을 지원하지 않는 Myisam 엔진을 사용하고 있습니다. InnoDB로 변경하십시오.

ALTER TABLE mst_goods_category ENGINE=InnoDB; 
+0

이것이 확인해야 할 사항이지만, PDO가 기본적으로 지원하지 않는 DB에 대한 트랜잭션을 에뮬레이트하지는 않습니까? –

+0

"ALTER TABLE mst_goods_category ENGINE = InnoDB;"를 수행합니다. 하지만 내가 테이블을 만들 때, 여전히 MyISAM .. 어떤 제안? 전에 고마워. 나쁜 영어에 대한 죄송합니다 –

+0

이 명령을 실행할 때 그것은 무엇을 말합니까? –

관련 문제