$oDB = &DB::getInstance();


$oDB->begin();


executeQuery('abc.insertSomething',$arg);

$oDB->commit();

 

이런식으로 쓸때 rollback을 도중에 시키고 에러를 리턴해도 그 이전까지 입력된 db는 실제로 롤백이 안되더라고요.

 

다른 분들도 이러시나요? 아니면 제가 이상하게 쓰고 있는건가요. 물론 mysqli 씁니다.

 

  • profile
    mysqli는 트랜잭션을 지원하지 않습니다. mysqli_innodb는 지원합니다.

    mysqli_innodb를 쓰더라도 실제 쿼리에서 사용하는 테이블이 모두 innodb 방식이어야 커밋이나 롤백이 정상적으로 작동합니다. 이건 XE의 문제가 아니라 MySQL에서 innodb 방식을 쓰지 않으면 트랜잭션을 무시하기 때문입니다.
  • profile ?
    아 그렇군요 ㅡ,.ㅡ;; 그런데 mysqli innodb로 쓰고 있는데도 롤백이 안됐던거 같은데...

    XE 설치시 이노디비를 사용하도록 하면 자동으로 그렇게 되지 않나요? 
  • ? profile
    이상적인 상황이라면 자동으로 됩니다만, 대부분의 국내 웹호스팅에서는 innodb를 선택해도 아무 효과가 없습니다. phpmyadmin에 들어가서 정말로 테이블이 innodb로 되어 있는지 확인해 보세요.
  • profile ?
    답변 감사합니다!