Det du skal gøre er at tilføje en form for lås her for at forhindre løbsforhold som den, du har oprettet:
UPDATE persons SET processing=1 WHERE id=:id AND processing=0
Det vil undgå at dobbeltlåse den.
For at forbedre dette endnu mere skal du oprette en låsekolonne, du kan bruge til at gøre krav på:
UPDATE persons
SET processing=:processing_uuid
WHERE processing IS NULL
LIMIT 1
Dette kræver en VARCHAR
, indekseret processing
kolonne, der bruges til at påstå, der har en standard på NULL
. Hvis du får en række ændret i resultaterne, har du gjort krav på en post og kan gå og arbejde med den ved at bruge:
SELECT * FROM persons WHERE processing=:processing_uuid
Hver gang du prøver at gøre krav, skal du generere en ny krav UUID-nøgle.