Пример кода:PHP PDO Откат транзакции при выполнении сбой?
$pdo->beginTransaction();
try {
$query1 = $pdo->prepare(...);
$query2 = $pdo->prepare(...);
$query1->execute();
$query2->execute();
$pdo->commit();
} catch(Exception $e){
try {
$pdo->rollBack();
} catch(Exception $re){
//...
}
//...
}
Я знаю, что готовить может бросить исключение, и совершить выбросит исключение, если нет транзакции работает.
Но возможно ли возникнуть такая ситуация, при которой подготовка будет успешной, но выполнение не удастся? Это не приведет к откату? Бросок также бросает, когда выполнение завершилось неудачно (я так не думаю, поскольку документация говорит, что он генерируется только при отсутствии транзакции).
Так я должен явно проверить результат выполнения и бросить свои собственные исключения, чтобы вызвать откат, как это ?:
$pdo->beginTransaction();
try {
$query1 = $pdo->prepare(...);
$query2 = $pdo->prepare(...);
if(!$query1->execute()){
throw new Exception('Query1 failed to execute.');
}
if(!$query2->execute()){
throw new Exception('Query2 failed to execute.');
}
$pdo->commit();
} catch(Exception $e){
try {
$pdo->rollBack();
} catch(Exception $re){
//...
}
//...
}
У вас есть PDO, настроенный на выброс исключений при ошибке – RiggsFolly
Но в принципе, если вы не дойдете до Commit, транзакция должна быть откатна – RiggsFolly
PDO :: rollBack() выбрасывает «PDOException», когда дело доходит до отката без предыдущего открытия сделка. –