Autor Zpráva
luma64
Profil
Zdravim, chcem sa opytat akym sposobom zakazem pristup na zaznam na 45 sekund. Predpokladam, ze to je dostatocny cas na to, aby uzivatel prostrednictvom formularu tento zaznam aktualizoval. Po ulozeni by sa zaznam opat uvolnil. Ide o to aby nemohol zaznam modifikovat v tom istom case iny uzivatel. Mohol by som ho zamykat nejakym priznakom ale keby nahodou uzivatel zavrel formular bez ulozenia alebo by "spadol prehliadac" neviem ako by som zaznam odomkol.
Casero
Profil
Zdá se, že se snažíš simulovat transakci. Opravdu to chceš na bázi php? Nebo se bavíme o záznamu v databázi - v jaké?
luma64
Profil
Dataza je mysql
Casero
Profil
Pak tedy hledej transaction mysql ;) - přiklad
Karel N.
Profil *
nepoužívej na to transakce, můžeš skončit v backlogu, v případě, kdy ti php skript z nějakého důvodu záznam neuvolní. Řešit nějaký timeout lock na mysql je hodně nepohodlné a hlavně komplikované na správu.

Udělej si v mysql vlastní nulový sloupec typu timestamp, do něj si ukládej čas do kdy je záznam rezervovaný (zamčený), při jiné úpravě si prostě ověřuj jestli je záznam volný nebo není.

Zamčení záznamů by mohlo vypadat nějak takhle:
UPDATE `objednavky` SET lock_until = now() + interval 45 second WHERE id = %s

Ověření jestli je zamknutý nějak takhle:
SELECT IF(lock_until > now(), "lock", "free") as state FROM `objednavky` WHERE id = %s

Ruční uvolnění zámku je jasné:
UPDATE `objednavky` SET lock_until = null WHERE id = %s
luma64
Profil
Fajn, dakujem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: