Php Zabezpieczenie przed podwójnym zmienieniu wartość w bazie

0

Możliwe że temat jest trochy nie jasny więc
Robie mały projekt strony z ofertami do kupna/sprzedania, (Jest to tylko projekt do nauki, nie zamierzam tego używać komerycyjnie) i moim pomysłem na "kupienie/sprzedanie danego przedmiotu jest taki że:

  1. Po kliknieciu guziku sprawdzam czy status przedmiot jest na "avaible"
  2. Jeśli jest avaible zmieniam status na processing, następnie przydzielam go do odpowiedniego użytkownika po opłacie i koniec
    2.1 Jeśli nie jest 'avaible" to zwracam że przedmiot jest nie dostepny.
    2.2 Jeśli podczas "processing" pojawi się jakieś Exception zostanie status zmieniony na "avaible" oraz automatycznie po 5minutach statusu "processing" status powróci do "avaible"
    Czy w taki sposób jest opcja że Klient A i B kupią ten sam przedmiot? W tym samym momencie zostanie kliknięty guzik więc teoretycznie status mają avaible i następnie oba ustawią status na "processing"? Jeśli tak to jak to powinno się zrobić "dobrze" ?
1

Użyj zapytań z LOCKiem. Raz uzyskany (przez zapytanie, które dobrało się pierwsze do bazy), póki nie zostanie usunięty nie pozwoli uzyskać LOCKa przez drugie zapytanie co umożliwi Ci np: wyświetlenie komunikatu, że jednak przedmiot został już kupiony bo próba update'u przez drugie zapytanie się nie powiedzie.

MySQL locking

1 użytkowników online, w tym zalogowanych: 0, gości: 1