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