Intereting Posts
Запросить данные из формы с несколькими входами, использующими одно и то же имя Почему это почтовое сообщение не декодируется правильно? Как включить расширение cURL на свободном уровне Amazon EC2 Любой способ изменить URL-адрес заголовка без перезагрузки? Хранение флажков в PHP-форме Проверьте, является ли строка временной отметкой unix Можете ли вы объявить атрибут private в абстрактном классе? Как использовать multi Auth в laravel 5.2 Идентификатор SyntaxError: начинается сразу после числового литерала. Передача переменной PHP в JavaScript Как реализовать returnurl как SO в PHP? Переназначить родительскую переменную в включенном шаблоне Dwoo Раздражающая ошибка PHP: «Строгие стандарты: только переменные должны передаваться по ссылке в" Файлы cookie PHP и cURL Свойства Flex-box удаляются в электронной почте gmail. Совместить весь текст между двумя тегами HTML, используя регулярное выражение в PHP

Сколько откат следует писать в транзакции?

Заяц – мой сценарий:

$id = $_GET['id']; $value = $_GET['val']; // database connection here try{ $db_conn->beginTransaction(); $stm1 = $db_conn->prepare("UPDATE table1 SET col = 'updated' WHERE id = ?"); $stm1->execute(array($value)); $done = $stm->rowCount(); if ($done){ try { $stm2 = $db_conn->prepare("INSERT into table2 (col) VALUES (?)"); $stm2->execute(array($id)); } catch(PDOException $e){ if ((int) $e->getCode() === 23000) { // row is duplicate $stm3 = $db_conn->prepare("DELETE FROM table2 WHERE col = ?"); $stm3->execute(array($id)); } else { $db_conn->rollBack(); // is this line of code necessarily ?? } } } else { $error = true; } $db_conn->commit(); } catch(PDOException $e){ $db_conn->rollBack(); } 

Как видите, в моем скрипте есть несколько (вложенных) блоков try - catch . Поэтому я хочу знать, нужен ли какой-либо блок catch его собственный rollBack() или я должен просто написать его один раз для всего скрипта?


EDIT: Также как примечание, этот оператор DELETE действует как отмена . Предположим, вы дали голосование за сообщение, и вы хотите его вернуть. Чтобы оператор DELETE удалял его, если вы дважды отправляете голосование.