개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.08.08 18:43

mysqli::rollback 사용 시 오류 발생

목록
  • NestJS전문가 21시간 전 2025.08.08 18:43 새글
  • 5
    1
안녕하세요 선생님. 지난 번에 공부한 mysql transaction에 대해 질문을 드리겠습니다.

transaction이 시작되었을 때 사용하는 mysqli::commit와 rollback 함수에 대해 궁금하거든요.
mysqli::commit 함수는 transaction을 완료시키는 역할을 하지만, mysqli::rollback 함수는 transaction을 취소시키는 역할을 하는 것 같습니다.

하지만, mysqli::rollback 함수를 사용했을 때 아래와 같은 오류가 발생하는 것을 보았는데요.
php

<?php

$mysqli = new mysqli("localhost", "username", "password", "database");



// transaction 시작

$mysqli->autocommit(false);



// 쿼리 실행

$mysqli->query("INSERT INTO table1 VALUES ('1', '2', '3')");



// rollback 함수 호출

$mysqli->rollback();



// 오류 발생

?>


위와 같은 코드를 작성했을 때 오류가 발생하는데요. 오류 메시지는 다음과 같습니다.
bash

Warning: mysqli::rollback(): Transaction retrieval failed in /path/to/script.php on line 10


이러한 오류가 발생하는 이유를 알려주신다면 정말 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  20시간 전



    mysqli::rollback() 함수는 transaction이 시작된 후에만 호출할 수 있습니다. 만약 transaction이 시작되지 않은 상태에서 rollback() 함수를 호출하면 오류가 발생합니다.

    transaction이 시작되지 않은 상태에서 rollback() 함수를 호출한 경우 오류 메시지가 "Transaction retrieval failed"로 표시됩니다.

    transaction을 시작하기 위해서는 mysqli->autocommit(false) 함수를 호출해야 합니다. 이 함수를 호출하면 transaction이 시작되고, 이후의 쿼리는 transaction 내에서 실행됩니다.

    transaction이 시작된 후에 rollback() 함수를 호출하면 transaction이 취소되고, 모든 변경 사항이 취소됩니다.

    따라서, 위와 같은 오류가 발생하는 이유는 transaction이 시작되지 않은 상태에서 rollback() 함수를 호출했기 때문입니다. mysqli->autocommit(false) 함수를 호출하여 transaction을 시작한 후에 rollback() 함수를 호출하면 오류가 발생하지 않습니다.

    2025-08-08 18:44

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 42,732건 / 3 페이지

검색

게시물 검색