Ручные транзакции

mus

Новичок
Ручные транзакции

Имеется задача осуществить средствами пхп механизм транзакции.

Предположим, что результат выполнения след. функций таков:

func1() == 1;
func2() == 1;
func3() == 1;
func4() == 1;
func5() == 1;

Если, скажем, func5() выдает 0, то нужно откатить все изменения, которые были сделаны функциями 1,2,3,4.
Тут либо все это логически строится и увязывается в стройную систему условных конструкций, либо выдумывается механизм ручной транзакции.
Буду признателен, если предложите свои варианты.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Не делайте никаких изменений, пока не прошли все проверки. :)
 

mus

Новичок
КАК??? Глупость!

Итак, представим, что у нас есть func1(), которая выдает массив вновь созданной сессии ($_SESSION['auth']) если отработала эта функция правильно или в противном случае false, если отработала неверно.
Положим, func2() принимает массив функции 1 и добавляет его в базу данных. Если func2() отработала неверно и вернула false, то нам нужно удалить массив $_SESSION['auth'] в принципе!

Я понимаю, можно в случае func2() == false написать что-то, вроде unset($_SESSION['auth']);, но дело в том, что в моей идеологии сие нужно автоматизировать и дать возможность пооткатывать хоть 100 действий, цепочка выполнений которых была прервана.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
В вашей идеологии 100% будут вещи, которые нельзя откатить.
напримр вы не сможете отментиь отсылку почты в ф.1 если ф.2 == false.
Посему ответ на 100% - никак.

По это сугубо мое мнение.
 

Qwerty

Новичок
Не делайте никаких изменений, пока не прошли все проверки.
Вы о чем? А если каждая операция - работа с БД? И каждая из операций может теоретически окончиться неудачей? Как тут можно сначала сделать все проверки?
В общем случае, конечно, сделать откат не получится, но при некоторых ограничениях, имхо, вполне возможно.
 

phprus

Moderator
Команда форума
Qwerty
А если каждая операция - работа с БД?
В таком случае надо использовать БД поддерживающие транзакции. (MySQL их кстати поддерживает).

но при некоторых ограничениях, имхо, вполне возможно.
Помоему тут слишком много ограничений, так что универсальной библиотеки даже при наличии ограничений написать не возможно.
 

Qwerty

Новичок
phprus
В таком случае надо использовать БД поддерживающие транзакции...
Ну, задача стояла средствами php сделать, кроме того, это может быть модуль, работающий не только с БД.

mus
Можно чуть более конкретный пример, где именно нужно будет использовать?

Понятно, что есть вещи, которые откатить нельзя никак (тот же пример с почтой), но специализированных модуль вполне можно попробовать сделать. Вопрос только, насколько это нужно...
 

kruglov

Новичок
Создаем копию системы, производим в ней действия (добавления в базу, удаление файлов), в случае удачи копируем обратно, иначе стираем.
 

gray07

Новичок
можно сделать 5 классов, наследованных от базового, с методами process() и rollback()
потом еще шестой, который будет хранить массив этих классов, и постепенно вызывать метод process() этих классов. Если что-то пошло не так, вызывать rollback() в обратном порядке :)
 

Сергей Тарасов

Профессор
Вообще маразм.
А собственно из каких соображений появилась необходимость в такого рода транзакциях???
 

Qwerty

Новичок
kruglov
Само то! :) а главное, действительно универсально. Кроме почты. :D

А собственно из каких соображений появилась необходимость в такого рода транзакциях???
Мне тоже интересно узнать на примере.
 

С.

Продвинутый новичок
ТС совсем не задавался вопросом сохранности данных и удачности операций. Его интересовало, что делать, если на N-ом шаге (случайно?) обнаружится, что пароль введен неправильно.
 

phprus

Moderator
Команда форума
С.
(случайно?) обнаружится, что пароль введен неправильно.
В таком случае тому, кто писал систему авторизации нужно убиться ап стену, так как чтобы допустить такую ошибку в системе авторизации нужно быть гением. По крайней мере я не знаю, как можно написать приложение, чтобы оно вначале пустило человека кудато, а потом обнаружило что прав у этого человека на это нет.

А создание подобий транзакций в таком случае - это лечение зубов через известное место.
 
Сверху