본문 바로가기
MySql

MySQL How can I implement commit/rollback for MySQL in PHP?

by 베이스 공부 2020. 11. 16.
반응형

기본적으로 실행하는 데 오랜 시간이 걸리고 때때로 시간이 초과되고 반 완성 데이터가 데이터베이스 주위에 떠 다니는이 스크립트가 있습니다. (예, 저는 완벽한 세상에서 커밋과 롤백을 구현하는 대신 수정하겠다는 것을 알고 있지만 그렇게하지 않아야합니다)

다음은 내 기본 코드입니다 (단순함을 위해 축소됨).

$database = new PDO("mysql:host=host;dbname=mysql_db","username","password");

while (notDone())
{
    $add_row = $database->prepare("INSERT INTO table (columns) VALUES (?)");
    $add_row->execute(array('values'));

    //PROCESSING STUFF THAT TAKES A LONG TIME GOES HERE
}

$database = null;

그래서 내 문제는 while 루프 내의 전체 프로세스가 완료되지 않은 경우 삽입 된 행이 그대로 유지되는 것을 원하지 않는다는 것입니다. 어떻게 든 while 루프의 시작과 끝에서 커밋 / 롤백을 사용할 수 있다고 생각하지만 방법을 모르겠습니다.

 

해결 방법

 


기본적으로 장기 실행 코드를 다음과 같이 래핑합니다.

$dbh->beginTransaction();
...
$dbh->commit();


"스크립트가 종료되거나 연결이 닫히려고 할 때 미해결 트랜잭션이 있으면 PDO가 자동으로 롤백합니다."

따라서 스크립트가 시간 초과되었을 때 보류 중이던 트랜잭션을 잃게됩니다.

그러나 실제로는 살아남는 스크립트에 의존하지 않도록 이것을 재 설계해야합니다.

 

참조 페이지 https://stackoverflow.com/questions/329622

 

 

반응형

댓글