[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Транзакции ПДО при перегрузке страницы
stump
Мне хочется сделать постраничную регистрацию, но чтобы в БД все писалось когда на последней странице юзер жмякнет ОК! И конечно я пошел использовать транзакции.

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

В чем интерес такой ситуации?

П.С. Конечно все делается в ООП парадигме smile.gif.

_____________
Трус не играет в хокей
T1grOK
Транзакции предназначены не для этого. В таком контексте они не используются.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Hello
stump, транзакция живет в пределах одного соединения.
Соединение открывается при запуске скрипта и закрывается при завершении.

_____________
VPS от 5$, первые 2 месяца - бесплатно.
stump
Вот в примере их доков вполне себе выполняется несколько инсерт в одну транзакцию.
пример
try {
$dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
array(PDO::ATTR_PERSISTENT => true));
echo "Подключились\n";
} catch (Exception $e) {
die("Не удалось подключиться: " . $e->getMessage());
}

try {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbh->beginTransaction();
$dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')");
$dbh->exec("insert into salarychange (id, amount, changedate)
values (23, 50000, NOW())"
);
$dbh->commit();

} catch (Exception $e) {
$dbh->rollBack();
echo "Ошибка: " . $e->getMessage();
}


Другое дело что каждую перегрузку страницы я вновь создаю подключение (открываю его из кэша состояния). Другое дело что транзакция не сохраняется (это не является контекстом, это является особенностью драйвера, ПДО и автокомита/автосброса. Получается что скрипт закончил работу выполнился авто роллбэк и соединение прикрылось.

Выбрал настройку PDO::ATTR_PERSISTENT чтобы соединение кэшировалось, но кэшируется видимо без транзакции, что не хорошо...

T1grOK как следует поступать в данном контексте. Я хочу чтобы у юзера была возможность забить посреди регистрации и при этом ничего в БД не записалась.

_____________
Трус не играет в хокей
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.