[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Транзакция в MySQLI
te0203
Есть скрипт добавления заказа в интернет магазине.
Заказ может состоять не из одной позиции, если по одной из позициий произошла ошибка надо откатить базу на состояние на начало скрипта.
Как понимаю надо использовать транзакцию.
Таблица в InnoDB и должна поддерживать транзакции.
Подскажите как это реализовать?
Запрос в начале скрипта "START TRANSACTION;" - выдал сразу же ошибку.



Спустя 53 минуты, 23 секунды (16.08.2011 - 21:59) waldicom написал(а):
Обычно делается по-другому.
В "корзину" складываются товары, а потом заказываются "одним легким движением"

Спустя 4 минуты, 12 секунд (16.08.2011 - 22:03) te0203 написал(а):
Это понятно, когда вынимаем из корзины и проверяем наличие на складе, допустим на складе только что списали последний товар, получается ошибка, а две из трёх позиций уже внесены в заказ, как в этом случае отминить первые две позиции?

Спустя 10 часов, 39 минут, 37 секунд (17.08.2011 - 08:43) T1grOK написал(а):
Цитата (waldicom @ 16.08.2011 - 18:59)
Обычно делается по-другому.
В "корзину" складываются товары, а потом заказываются "одним легким движением"

Ваше обычно менее надежно. При работе с деньгами, товарами и прочими ценностями лучше использовать транзакции, которые дают больший контроль над данными.
А по теме te0203 можете глянуть вот это http://makarou.com/ispolzovanie-tranzakcij-v-mysqli

Спустя 3 часа, 22 минуты, 32 секунды (17.08.2011 - 12:05) te0203 написал(а):
Спасибо, я это уже тоже нашёл, только не хватает функции для блокировки таблицы на время транзакции.

Спустя 15 минут, 11 секунд (17.08.2011 - 12:20) waldicom написал(а):
Цитата (T1grOK @ 17.08.2011 - 06:43)
Ваше обычно менее надежно. При работе с деньгами, товарами и прочими ценностями лучше использовать транзакции, которые дают больший контроль над данными.

Это к чему было сказано? Каждый нормальный человек и так понимает это, просто надо найти компромис между надежностью и затратами.

Спустя 3 минуты, 2 секунды (17.08.2011 - 12:23) te0203 написал(а):
Есть ещё и объектный способ
http://habrahabr.ru/blogs/php/119294/
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->transactionStart();
$mysqli->simpleQuery('DELETE from table');
$mysqli->simpleQuery('DELETE from another_table');
$mysqli->transactionCommit();

Остаётся только найти функцию блокировки таблицы на время транзакции.
Быстрый ответ:

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