반응형
기본적으로 실행하는 데 오랜 시간이 걸리고 때때로 시간이 초과되고 반 완성 데이터가 데이터베이스 주위에 떠 다니는이 스크립트가 있습니다. (예, 저는 완벽한 세상에서 커밋과 롤백을 구현하는 대신 수정하겠다는 것을 알고 있지만 그렇게하지 않아야합니다)
다음은 내 기본 코드입니다 (단순함을 위해 축소됨).
$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
반응형
'MySql' 카테고리의 다른 글
MySQL 서버 (PhpMyAdmin)에 로그인 할 수 없습니다. (0) | 2020.11.16 |
---|---|
MySQL 외래 키는 어디에 저장해야합니까? (0) | 2020.11.16 |
MySQL phpexcel을 사용하여 mysql 데이터베이스에서 Excel 보고서 만들기 (0) | 2020.11.16 |
MySQL PHP에서 총 가격을 계산하는 방법 (0) | 2020.11.16 |
MySQL Entity Framework를 사용하여 암호화 된 열 (0) | 2020.11.16 |
댓글