Получить конкретный код ошибки SQL или определить время ожидания блокировки с помощью PDO PHP? - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь определить конкретное условие сбоя 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");
    }

}

Я читал некоторую документацию для getCode () PDO и пытался использовать это, но он только дает мне SQLSTATE, который близок, но немного слишком универсален.

} catch(Exception $log) {

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

}

Это дает мне SQLSTATE HY000, но мне нужен код ошибки 1205 (я использую документацию MariaDB: https://mariadb.com/kb/en/library/mariadb-error-codes)

Есть ли другой способ получить коды ошибок SQL или определить время ожидания блокировки с помощью PDO PHP?

Примечание

Я использую MariaDB (10.3) и PHP (7.2)

...