[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: транзакции. правильно ли использую?
Страницы: 1, 2
123456
Правильно ли использую транзакции?

$mysqli->autocommit(false);

// Запросы

$mysqli->commit();


и вот еще, приведите примеры, когда можно использовать $mysqli->rollback(), а то что-то нет мыслей как это можно задействовать в проекте.
twin
Если по логике скрипта после транзакции есть еще запросы, которые не касаются транзакции, то при неудачном стечении нужн её откатить. По идее лучше откатить в любом случае, потому что мало ли как потом изменится логика.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
123456
а можно конкретный пример? а то что-то ну никак не могу додуматься...
Invis1ble
пример в виде псевдокода:
// start transaction
try {
// запросы для одной операции
} catch (Exception $e) { // Exception - для примера, лучше ловить конкретных наследников
// rollback

throw $e;
}
// commit


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

twin
Как то так:
$mysqli->autocommit(false);

$mysqli->query("Запрос на вставку");

if($mysqli->affected_rows == 0)
{
$mysqli->rollback();
return false;
}

$mysqli->query("Второй запрос транзакции");

if($mysqli->affected_rows == 0)
{
$mysqli->rollback();
return false;
}

//И так далее

$mysqli->commit();


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Цитата (Invis1ble @ 23.09.2015 - 15:11)
пример в виде псевдокода:

В исключениях откатывать транзакцию необязательно. Если конечно в cath нет других запросов. Она автоматически откатится по завершении скрипта.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
123456
Как записать это все, я видел в мануале!
А вот приведите пример из жизни, когда приходилось использовать подобный откат?
Invis1ble
Цитата (twin @ 23.09.2015 - 18:23)
Она автоматически откатится по завершении скрипта.
twin
Цитата (123456 @ 23.09.2015 - 15:24)
А вот приведите пример из жизни, когда приходилось использовать подобный откат?

Ну вот из последних наших баттлов. smile.gif
Цитата (Invis1ble @ 23.09.2015 - 15:25)
причем тут исключения?

Всмысле... В твоем примере их нету? blink.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Invis1ble
Цитата (123456 @ 23.09.2015 - 18:24)
А вот приведите пример из жизни, когда приходилось использовать подобный откат?

любая атомарная с точки зрения бизнес-логики операция

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Invis1ble
Цитата (twin @ 23.09.2015 - 18:34)
Всмысле... В твоем примере их нету? 
twin
Цитата (Invis1ble @ 23.09.2015 - 15:46)
есть
Ну вобщем то да, тут я погорячился. Посто у нас разное отношение к исключениям. Я привык использовать их только в действительно исключительных ситуациях, после которых продолжать выполнение скрипта не имеет смысла.

Использовать их для логики мне кажется несколько накладным.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
Цитата (123456 @ 23.09.2015 - 17:24)
Как записать это все, я видел в мануале!
А вот приведите пример из жизни, когда приходилось использовать подобный откат?

Принцип транзакции - все или ничего.

Создаем пользователя.
Пишем 3-мя запросами в 3 таблицы:
в users - данные по юзеру
в adressbook - его дефолтный адрес
в users_config - какие-то личные настройки для данного юзера

Можно нагородить кучу if else, а можно открыть транзакцию, и подряд слать все запросы, если хоть один завершиться неудачно, то откатятся все.

Интернет-магазин - оформление покупки.
2 таблицы - orders и orders_products
запись должна пройти или в обе таблицы успешно, или ни в одну из них.


_____________
[продано копирайтерам]
Arh
twin
Да он их привёл как пример, написано же "псевдокод" =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Цитата (Arh @ 23.09.2015 - 20:10)
Да он их привёл как пример, написано же "псевдокод" =)

Ну просто на мой взгляд это неудачный пример. Если в блоке catch скрипт останавливать, то откат будет произведен автоматически. Если не останавливать, то это чревато в данном случае серьёзным багом. Кроме того - накладно.

Правда откатывать транзакцию желательно всегда, мало ли. smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

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