2017-01-11 1 views
1

읽기 전용으로 테이블의 행을 잠그려고하지만 다음 코드는 행을 잠그지 않습니다. POST 요청을 통해 code1을 커밋하지 않고 "code1"을 실행 한 다음 "code2"를 실행했습니다. 따라서 각 코드는 고유 한 .php 파일에 있습니다.PDO로 SQL 행을 잠그는 방법

"SELECT ... FOR UPDATE"로 시도해 보았지만 역시 작동하지 않았습니다.

코드 1 :

try{ 
    $pdo->beginTransaction(); 
    $sql = "SELECT assertedFlags FROM statementcontent WHERE id = $statementId LOCK IN SHARE MODE;"; 
    $statement = $pdo->query($sql); 
    var_dump($statement->fetchAll()); 
}catch(Exception $e){ 
    $pdo->rollBack(); 
    exit('Exception ' . $e->getMessage()); 
} 

CODE2 :

try{ 
    $pdo->beginTransaction(); 
    $sql = "SELECT assertedFlags FROM statementcontent WHERE id = $statementId LOCK IN SHARE MODE;"; 
    $statement = $pdo->query($sql); 
    var_dump($statement->fetchAll()); 

    //New segment starts here: 

    $sql = "UPDATE statementcontent SET assertedFlags = '4' WHERE id = $statementId;"; 
    $statement = $pdo->exec($sql); 
    var_dump($statement); 
    $pdo->commit(); 
}catch(Exception $e){ 
    $pdo->rollBack(); 
    exit('Exception ' . $e->getMessage()); 
} 

는 코드 1은 잠금이 해제됩니다 종료로 인해 후 잠이 아니라고 할 수 있을까?

편집 나는 1 ~ 2 개 PDO 인스턴스와 파일 잠금이 일이 시간에 모두 넣어. 나는 많은 요청을 할 때 서버가 어떻게 쿼리를 관리하는지 이해하지 못한다. 많은 프로세스 또는 많은 스레드가있을 것입니까? 모든 경우에 대해 또는 많은 스레드의 경우에만 잠긴 상태로 유지됩니까? 감사합니다. . 당신이 보라 잠금 적절한 행에 대해

+0

물론 코드 1을 종료하면 잠금이 해제되기 때문에 잠겨 있지 않습니다. –

답변

관련 문제