>  기사  >  백엔드 개발  >  PHP에서는 트랜잭션을 시작한 후 프로그램에서 예외가 발생하고 커밋이나 롤백이 실행되지 않습니다. MySQL 트랜잭션이 롤백됩니까?

PHP에서는 트랜잭션을 시작한 후 프로그램에서 예외가 발생하고 커밋이나 롤백이 실행되지 않습니다. MySQL 트랜잭션이 롤백됩니까?

WBOY
WBOY원래의
2016-08-10 09:07:172181검색

인터넷에서 트랜잭션 오픈 후 SQL 문 실행 오류나 프로그램 오류가 발생한다고 하는데, 롤백이 실행되지 않으면 다음 실행 시 자동으로 커밋이 발생한다고 합니다.
프로그램 오류가 발생합니다. 롤백 롤백 아님

그러나 일부 사람들은 MySQL에 커밋되지 않은 트랜잭션이 있는 경우 자동으로 제출된 매개변수가 이때 0이 되어야 한다고 말합니다.
그러나 다른 언어의 MySQL 드라이버를 통해 작동하는 경우 이러한 드라이버에는 일반적으로 요청 처리가 완료된 후 자동으로 AUTOCOMMIT을 복구하는 기능이 있으며 처리되지 않은 트랜잭션은 자동으로 ROLLBACK됩니다.

답글 내용:

인터넷에서 트랜잭션 오픈 후 SQL 문 실행 오류나 프로그램 오류가 발생한다고 하는데, 롤백이 실행되지 않으면 다음 실행 시 자동으로 커밋이 발생한다고 합니다.
프로그램 오류가 발생합니다. 롤백 롤백 아님

그러나 일부 사람들은 MySQL에 커밋되지 않은 트랜잭션이 있는 경우 자동으로 제출된 매개변수가 이때 0이 되어야 한다고 말합니다.
그러나 다른 언어의 MySQL 드라이버를 통해 작동하는 경우 이러한 드라이버에는 일반적으로 요청 처리가 완료된 후 자동으로 AUTOCOMMIT을 복구하는 기능이 있으며 처리되지 않은 트랜잭션은 자동으로 ROLLBACK됩니다.

기본적으로 PDO를 사용한다고 가정합니다.
공식 문서에는 다음과 같이 나와 있습니다.

스크립트가 종료되거나 연결이 닫히려고 할 때 미해결 트랜잭션이 있는 경우 PDO는 자동으로 이를 롤백합니다. 이는 스크립트가 종료되는 경우 불일치를 방지하는 데 도움이 되는 안전 조치입니다. 예기치 않게 --트랜잭션을 명시적으로 커밋하지 않은 경우 문제가 발생한 것으로 가정하므로 데이터 안전을 위해 롤백이 수행됩니다.
스크립트가 종료되거나 연결이 닫히려고 할 때

스크립트가 종료될 때(정상 종료, 비정상 종료 포함)를 의미합니다.

PDO가 자동으로 롤백합니다

PDO는 자동으로 롤백됩니다.
문서에는 매우 명확하게 나와 있습니다.
PDO 드라이버를 사용하지 않는 경우 관련 드라이버 설명서를 확인하거나 질문에 어떤 드라이버를 사용하고 있는지 명확하게 명시할 수 있습니다.

그런데 이전 mysql_connect() 함수는 공식적으로 더 이상 권장되지 않습니다(더 이상 사용되지 않음).

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.