programing

특정 SQL 오류 코드를 가져오거나 PHP의 PDO로 잠금 시간 초과를 식별하시겠습니까?

telebox 2023. 9. 9. 09:26
반응형

특정 SQL 오류 코드를 가져오거나 PHP의 PDO로 잠금 시간 초과를 식별하시겠습니까?

저는 실패한 쿼리의 결과를 바탕으로 특정 SQL 실패 조건을 파악하려고 하는데, 이전에 비슷한 작업을 한 사람이 있는지 알고 싶었습니다.

예제 코드에서 테스트 테이블의 행을 잠그고 응답을 처리하려고 합니다.

$sql = " select tt_idno from testtab ".
       " where tt_idno = ? for update nowait ";
$testtab_Lock = $db->prepare($sql);

try {

    $db->beginTransaction();
    $testtab_Lock->execute([1]);
    $db->commit();

} catch(Exception $log) {

    $db->rollback();

}

문제는 레코드가 잠기면 이 쿼리가 실패할 것으로 예상한다는 점입니다.이상적으로 나는 예외를 다음과 같이 처리하고 싶습니다.

} catch(Exception $log) {

    $db->rollback();

    if($locked) {
        throw new Exception("Locked but everything is fine");
    } else {
        throw new Exception("Panic");
    }

}

PDO의 getCode()에 대한 설명서를 읽고 있었고 그것을 사용하려고 했지만 가깝지만 너무 일반적인 SQLSTATE만 제공합니다.

} catch(Exception $log) {

    echo "<span>" . $log->getCode() . "</span><br />";

}

SQLSTATE HY000을 제공하지만 원하는 오류 코드는 1205입니다(MariaDB 설명서 사용 중: https://mariadb.com/kb/en/library/mariadb-error-codes)

SQL Error Code를 얻거나 PHP의 PDO로 Lock Timeout을 식별하는 다른 방법이 있습니까?

메모

저는 MariaDB(10.3)와 PHP(7.2)를 사용하고 있습니다.

언급URL : https://stackoverflow.com/questions/55595553/get-specific-sql-error-code-or-identify-a-lock-timeout-with-phps-pdo

반응형