![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 3.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Na raz wykonuję dwa wywołania pliku php przez AJAXa. W pliku php blokowany jest określony rekord (aby drugie wywołanie tego pliku się do niego nie dobrało), poddawany jest operacjom a następnie odblokowywany. Niestety, jakimś kosmicznym cudem obydwa pliki operują na tym rekordzie naraz :/ Jak się przed tym lepiej zabezpieczyć? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) ![]() ![]() |
A jak blokujesz rekord? Masz ustawioną jakąś flagę? Skąd wiesz, że nie są blokowane? Może po prostu rekord jest obrabiany najpierw przez jeden plik a później przez drugi.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 3.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
robię update tego rekordu ustawiając w kolumnie `blok` wartość 1, odblokowanie to analogicznie umieszczenie tam 0.
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Moglbys pokazac caly kod php, jak blokujesz, jak operujesz.?
Pozatym skad wiesz, ze operuja w tym samym czasie? ps: no i najwazniejsze: czy przed operowaniem sprawdzasz czy mozesz operowac? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 3.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
wiem, że wykonują się w tym samym czasie ponieważ wyniki wewnątrznej operacji są zdulbowane, pomimo tego, że drugi raz operacja może nastąpić dopiero kilka minut po zablokowaniu (ustawiany jest w innejkolumnie time()). no i zanim w ogóle zacznie sięblkowanie jest sprawdzanie czy można (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował patrykt 13.09.2006, 09:33:00 |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Poprosze grzecznie jeszcze raz:
pokaz caly kod php, wlacznie z tym jak sprawdzasz czy zablokowane. Bo to co tu pokazales, to nie ma w tym zadnego bledu, nic nie mowi konkretnego nam. Wiec jesli chcesz by ci ktos pomogl, to ty pomoz mu pomoc ci. Rozumiesz? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 3.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ten post edytował patrykt 13.09.2006, 10:21:59 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Od razu lepiej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Jedyne co mi przychodzi do glowy, to ten warunek:
Skoro ci sie wykonuje jednak za czesto, to ten warunek musi byc nie spelniony. ALe jakos nie mam sily go analizowac. Co chciales osiagnac? Ze przez iles tam sekund (minut) nie mozna modyfikowac tego rekordu? A nie mozna prosciej? Dalem *60 bo chyba ty tam minuty trzymasz. ps: przenosze bo z AJAXem to ma nie wiele wpolnego |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 3.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
rzeczywiście, z tym ifem to jednak chyba przekombinowałem.
no ale nadal nie wiem co zrobić aby jednocześnie nie przechodził przez niego dwa wywołania pliku. |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
ale po zmianach w ifie nadal przechodzi?
Zrob proste debugowanie. Wyswietlaj (tudziesz wal do pliku) informacje jakie sa wartosci poszczegolnych danych, czy warunek napewno dobrze to wychwytuje, jakie ID i takie tam. W ten sposob powinienies do czegoś dojść. Bo w tym kodzie to nie widze zadnych wiekszych bledow, wiec trudno mi to sprawdzic. Jedyne co mi sie rzucilo w oczy to to, ze raz piszesz w tabeli feeds: user_id, a raz piszesz id, ale zakladam ze oba pola są i sa sobie rownoznaczne w tej sytuacji. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 3.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
kiedyś zrobiłęm debugowanie i mnie szczerze mówiąc przeraziło - wszystko wykonało się nielogicznie NARAZ kilka razy.
ale mam inny pomysł - każde wywołanie funkcji będzie obejmowało inną przestrzeń rekordów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 0 Dołączył: 27.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
kiedyś zrobiłęm debugowanie i mnie szczerze mówiąc przeraziło offtopic
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 219 Pomógł: 5 Dołączył: 18.07.2006 Skąd: Piekary Śląskie Ostrzeżenie: (0%) ![]() ![]() |
A nie prościej cały problem załatwić odpowiednim poziomem izolacji i transakcjami w samej bazie danych?
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 3.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 5 Dołączył: 8.11.2004 Skąd: trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
Czegoś tu nie kumam,
dałeś sobie specjalną kolumne o nazwie blok z wartosciami 0 lub 1, ktore mówią czy można operować na rekordzie a sprawdzasz jakimś dziwnym ifem z czasem, to nie lepiej po prosu sprawdzić to pole "blok"? |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 219 Pomógł: 5 Dołączył: 18.07.2006 Skąd: Piekary Śląskie Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 3.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Czegoś tu nie kumam, dałeś sobie specjalną kolumne o nazwie blok z wartosciami 0 lub 1, ktore mówią czy można operować na rekordzie a sprawdzasz jakimś dziwnym ifem z czasem, to nie lepiej po prosu sprawdzić to pole "blok"? no właśnie na tym polegał problem, że te pliki były jednocześnie sprawdzane pomimo sprawdzania kolumny blok (kod wyżej) |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 0 Dołączył: 27.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
obszerny artykuł na temat blokowania dostępu do rekordów > http://www.ddj.com/dept/database/192700218
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 19:58 |