Можно выбрать ... для обновления, сделать транзакцию электронной торговли, а затем вызвать хранимую процедуру MySQL на PHP? - PullRequest
2 голосов
/ 14 июня 2010

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

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

  1. Выберите ... ДЛЯ ОБНОВЛЕНИЯ для продукта, чтобы заблокировать строку таблицы.
  2. Сделайте транзакцию электронной торговли (Paypal, authorize.net и т. Д.)
  3. Если транзакция электронной торговли успешна, вызовите хранимую процедуру MySQL (в которой также есть транзакция SQL) для хранения информации о заказе и т. Д. ИЛИ ROLLBACK в случае неудачи

Возможно ли реализовать этот план? Чтобы выполнить SELECT ... FOR UPDATE, мне нужно запустить транзакцию SQL, но затем я также запускаю еще одну на шаге 3 в хранимой процедуре MySQL. Я не уверен, что произойдет. Кроме того, этот план приведет к тупиковому сценарию?

Извините за длинный вопрос, но любая помощь приветствуется!

1 Ответ

0 голосов
/ 08 июля 2010

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

Если другим абонентам требуется такая хранимая процедура, рассмотрите возможность выделения «работ» для новой хранимой процедуры.

...