Заказ может состоять не из одной позиции, если по одной из позициий произошла ошибка надо откатить базу на состояние на начало скрипта.
Как понимаю надо использовать транзакцию.
Таблица в 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/
Остаётся только найти функцию блокировки таблицы на время транзакции.
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();
Остаётся только найти функцию блокировки таблицы на время транзакции.