ďťż
 
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= ďťż
 
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=



=?ISO-8859-2?Q?Pawe=B3?= - 22-07-2007 00:03
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
  Witam

Jak zabezpieczyć się przed jednoczesną edycją bazy (tego samego rekordu)
przez dwie osoby (A i B) jednocześnie ?

Wygląda to tak:
A klika na www: "edytuj zamówienie" (rekord o jakimś nr) - PHP
przypisuje do bazy
(do tabeli użytkownicy - w rekordzie dotyczącym A - w kolumnie "numer
bieżącego zamówienia edytowanego teraz przez tego użytkownika")
numer tego klikniętego zamówienia który A chce edytować.

Najpierw PHP sprawdza jednak czy przypadkiem B (albo ktoś jeszcze inny)
nie zaczął już edytować tego zamówienia (tego rekordu o takim samym
numerze, który chce edytować A)

Działa to tak:
1) PHP (A) sprawdza czy ktoś inny nie edytuje już tego numeru
2) jeśli nie to przypisuje numer osobie (A), która akurat chce edytować
ten nr (rekord - zamówienie).
3) jeśli ten sam rekord za chwilę będzie chciał edytować B - "jego"
skrypt stwierdzi, że ten rekord jest już "zajęty" przez kogoś innego i
nie pozwoli na jego edycję przez B.

Problem pojawi się w momencie (z pkt-u widzenia A) pomiędzy 1) i 2),
kiedy skrypt uruchomi też inna osoba np. B i "jego" skrypt wpisze (pkt.
1), że ten nr jest zajęty (skrypt uruch. przez A nie zdążył jeszcze
"zająć" tego n-ru), jednak skrypt osoby A już tego nie zauważy - bo
sprawdził to już w pkt. 1) - wtedy ten nr jeszcze był wolny.

I z punktu osoby B - skrypt przez nią uruchomiony nie stwierdzi, że dany
nr jest zajęty (w momencie pomiędzy 1) i 2), z pkt-u widzenia A), bo
skrypt uruch. przez A "zajmie" ten nr dopiero w pkt. 2).

Jak zapobiec takiej "podwójnej" edycji tego samego rekordu ?

Dziękuję. Paweł





=?ISO-8859-2?Q?Przemys=B3aw_Rachwa=B3?= - 22-07-2007 00:03
=?ISO-8859-2?Q?Re=3A_=5BMySQL_4=2E0=2E=2E=2E4=2E1=5D_zabez?== ?ISO-8859-2?Q?pieczenie_przed_jednoczesn=B1_edycj=B1?=
  Paweł napisał(a):
> Witam
>
> Jak zabezpieczyć się przed jednoczesną edycją bazy (tego samego rekordu)
> przez dwie osoby (A i B) jednocześnie ?
>
> Wygląda to tak:
> A klika na www: "edytuj zamówienie" (rekord o jakimś nr) - PHP
> przypisuje do bazy
> (do tabeli użytkownicy - w rekordzie dotyczącym A - w kolumnie "numer
> bieżącego zamówienia edytowanego teraz przez tego użytkownika")
> numer tego klikniętego zamówienia który A chce edytować.
>
> Najpierw PHP sprawdza jednak czy przypadkiem B (albo ktoś jeszcze inny)
> nie zaczął już edytować tego zamówienia (tego rekordu o takim samym
> numerze, który chce edytować A)
>
> Działa to tak:
> 1) PHP (A) sprawdza czy ktoś inny nie edytuje już tego numeru
> 2) jeśli nie to przypisuje numer osobie (A), która akurat chce edytować
> ten nr (rekord - zamówienie).
> 3) jeśli ten sam rekord za chwilę będzie chciał edytować B - "jego"
> skrypt stwierdzi, że ten rekord jest już "zajęty" przez kogoś innego i
> nie pozwoli na jego edycję przez B.
>
> Problem pojawi się w momencie (z pkt-u widzenia A) pomiędzy 1) i 2),
> kiedy skrypt uruchomi też inna osoba np. B i "jego" skrypt wpisze (pkt.
> 1), że ten nr jest zajęty (skrypt uruch. przez A nie zdążył jeszcze
> "zająć" tego n-ru), jednak skrypt osoby A już tego nie zauważy - bo
> sprawdził to już w pkt. 1) - wtedy ten nr jeszcze był wolny.
>
> I z punktu osoby B - skrypt przez nią uruchomiony nie stwierdzi, że dany
> nr jest zajęty (w momencie pomiędzy 1) i 2), z pkt-u widzenia A), bo
> skrypt uruch. przez A "zajmie" ten nr dopiero w pkt. 2).
>
> Jak zapobiec takiej "podwójnej" edycji tego samego rekordu ?
>
> Dziękuję. Paweł

ze względu na późną porę napiszę krótko: Transakcja o ile twoja baza
wspiera coś takiego, tudzież blokowanie rekordu i przy próbie wykonania
UPDATE otrzymasz komunikat że zablokowane




=?ISO-8859-2?Q?Pawe=B3?= - 23-07-2007 00:02
=?ISO-8859-2?Q?Re=3A_=5BMySQL_4=2E0=2E=2E=2E4=2E1=5D_zabez?== ?ISO-8859-2?Q?pieczenie_przed_jednoczesn=B1_edycj=B1?=
  Przemysław Rachwał napisał(a):

> ze względu na późną porę napiszę krótko: Transakcja o ile twoja baza
> wspiera coś takiego, tudzież blokowanie rekordu i przy próbie wykonania
> UPDATE otrzymasz komunikat że zablokowane

Dziękuję za odpowiedź.

Chodzi mi o MySQL 4.0 albo 4.1

Ale co jeśli:
1) "A" sprawdza czy rekord jest wolny ?
- jest
2) podejmuje stosowne działanie w związku z tym

Ale okazało się, że pomiędzy 1) i 2) władował się B i w tym właśnie
momencie (między 1) i 2)) zablokował ?

Jak temu zapobiec, bo 4.0-4.1 chyba nie obsługuje transakcji ?




Przemyslaw Popielarski - 23-07-2007 00:23
=?iso-8859-2?Q?Re:_=5BMySQL_4.0...4.1=5D_zabezpieczenie_przed _jednoczes?==?iso-8859-2?Q?n=B1_edycj=B1?=
  Paweł wrote:
>
> Jak temu zapobiec, bo 4.0-4.1 chyba nie obsługuje transakcji ?

Chyba obsluguje.

--
../ premax
../ premax@hot.pl
../ koniec i bomba, a kto czytal ten traba. w.g.





=?ISO-8859-2?Q?Artur_Muszy=F1ski?= - 24-07-2007 00:12
=?ISO-8859-2?Q?Re=3A_=5BMySQL_4=2E0=2E=2E=2E4=2E1=5D_zabez?== ?ISO-8859-2?Q?pieczenie_przed_jednoczesn=B1_edycj=B1?=
  Paweł pisze:
> Witam
>
> Jak zabezpieczyć się przed jednoczesną edycją bazy (tego samego rekordu)
> przez dwie osoby (A i B) jednocześnie ?
>
> Wygląda to tak:
> A klika na www: "edytuj zamówienie" (rekord o jakimś nr) - PHP
> przypisuje do bazy
> (do tabeli użytkownicy - w rekordzie dotyczącym A - w kolumnie "numer
> bieżącego zamówienia edytowanego teraz przez tego użytkownika")
> numer tego klikniętego zamówienia który A chce edytować.
>
> Najpierw PHP sprawdza jednak czy przypadkiem B (albo ktoś jeszcze inny)
> nie zaczął już edytować tego zamówienia (tego rekordu o takim samym
> numerze, który chce edytować A)
>
> Działa to tak:
> 1) PHP (A) sprawdza czy ktoś inny nie edytuje już tego numeru
> 2) jeśli nie to przypisuje numer osobie (A), która akurat chce edytować
> ten nr (rekord - zamówienie).
> 3) jeśli ten sam rekord za chwilę będzie chciał edytować B - "jego"
> skrypt stwierdzi, że ten rekord jest już "zajęty" przez kogoś innego i
> nie pozwoli na jego edycję przez B.
>
> Problem pojawi się w momencie (z pkt-u widzenia A) pomiędzy 1) i 2),
> kiedy skrypt uruchomi też inna osoba np. B i "jego" skrypt wpisze (pkt.
> 1), że ten nr jest zajęty (skrypt uruch. przez A nie zdążył jeszcze
> "zająć" tego n-ru), jednak skrypt osoby A już tego nie zauważy - bo
> sprawdził to już w pkt. 1) - wtedy ten nr jeszcze był wolny.
>
> I z punktu osoby B - skrypt przez nią uruchomiony nie stwierdzi, że dany
> nr jest zajęty (w momencie pomiędzy 1) i 2), z pkt-u widzenia A), bo
> skrypt uruch. przez A "zajmie" ten nr dopiero w pkt. 2).
>
> Jak zapobiec takiej "podwójnej" edycji tego samego rekordu ?
>
> Dziękuję. Paweł

Tak na oko da się to zrobić nawet bez transakcji:
UPDATE zam SET edytowany_przez=434
WHERE id=3554 AND edytowany_przez IS NULL
i teraz sprawdzasz affected rows, jeśli 0 to znaczy że jest edytowany
przez kogoś innego

artur




=?ISO-8859-2?Q?Pawe=B3?= - 24-07-2007 00:12
=?ISO-8859-2?Q?Re=3A_=5BMySQL_4=2E0=2E=2E=2E4=2E1=5D_zabez?== ?ISO-8859-2?Q?pieczenie_przed_jednoczesn=B1_edycj=B1?=
  Przemyslaw Popielarski napisał(a):
> Paweł wrote:
>>
>> Jak temu zapobiec, bo 4.0-4.1 chyba nie obsługuje transakcji ?
>
> Chyba obsluguje.
>

A co zrobić żeby moje zapytania były objęte transakcją ?
Bo domyślnie chyba nie są ?




=?ISO-8859-2?Q?Pawe=B3?= - 24-07-2007 00:12
=?ISO-8859-2?Q?Re=3A_=5BMySQL_4=2E0=2E=2E=2E4=2E1=5D_zabez?== ?ISO-8859-2?Q?pieczenie_przed_jednoczesn=B1_edycj=B1?=
  > Tak na oko da się to zrobić nawet bez transakcji:
> UPDATE zam SET edytowany_przez=434
> WHERE id=3554 AND edytowany_przez IS NULL
> i teraz sprawdzasz affected rows, jeśli 0 to znaczy że jest edytowany
> przez kogoś innego
>
> artur

Nie rozumiem.
Jak sprawdzić affected rows i co to jest ?




Przemyslaw Popielarski - 24-07-2007 00:12
=?iso-8859-2?Q?Re:_=5BMySQL_4.0...4.1=5D_zabezpieczenie_przed _jednoczes?==?iso-8859-2?Q?n=B1_edycj=B1?=
  Paweł wrote:
>>> Jak temu zapobiec, bo 4.0-4.1 chyba nie obsługuje transakcji ?
>>
>> Chyba obsluguje.
>
> A co zrobić żeby moje zapytania były objęte transakcją ?

Zaczac transakcje.

> Bo domyślnie chyba nie są ?

Zalezy od konfiguracji.

Polecam instrukcje obslugi do MySQL.

--
../ premax
../ premax@hot.pl
../ koniec i bomba, a kto czytal ten traba. w.g.




Przemyslaw Popielarski - 24-07-2007 00:12
=?iso-8859-2?Q?Re:_=5BMySQL_4.0...4.1=5D_zabezpieczenie_przed _jednoczes?==?iso-8859-2?Q?n=B1_edycj=B1?=
  Paweł wrote:
> Jak sprawdzić affected rows i co to jest ?

To jest nazwa funkcji, uzywasz php, to zajrzyj do instrukcji php.

--
../ premax
../ premax@hot.pl
../ koniec i bomba, a kto czytal ten traba. w.g.




=?ISO-8859-2?Q?Pawe=B3?= - 24-07-2007 00:12
=?ISO-8859-2?Q?Re=3A_=5BMySQL_4=2E0=2E=2E=2E4=2E1=5D_zabez?== ?ISO-8859-2?Q?pieczenie_przed_jednoczesn=B1_edycj=B1?=
  Przemyslaw Popielarski napisał(a):
> Paweł wrote:
>> Jak sprawdzić affected rows i co to jest ?
>
> To jest nazwa funkcji, uzywasz php, to zajrzyj do instrukcji php.
>

Dzięki, dobry pomysł z tym affected rows.




=?ISO-8859-2?Q?Pawe=B3?= - 24-07-2007 00:12
=?ISO-8859-2?Q?Re=3A_=5BMySQL_4=2E0=2E=2E=2E4=2E1=5D_zabez?== ?ISO-8859-2?Q?pieczenie_przed_jednoczesn=B1_edycj=B1?=
  Przemyslaw Popielarski napisał(a):
> Paweł wrote:
>>>> Jak temu zapobiec, bo 4.0-4.1 chyba nie obsługuje transakcji ?
>>>
>>> Chyba obsluguje.
>>
>> A co zrobić żeby moje zapytania były objęte transakcją ?
>
> Zaczac transakcje.
>
>> Bo domyślnie chyba nie są ?
>
> Zalezy od konfiguracji.
>
>
> Polecam instrukcje obslugi do MySQL.

Nie lubię instrukcji do MySQL, działa mi na nerwy.
Do PHP instrukcja jest znacznie lepsza.




Przemyslaw Popielarski - 24-07-2007 00:12
=?iso-8859-2?Q?Re:_=5BMySQL_4.0...4.1=5D_zabezpieczenie_przed _jednoczes?==?iso-8859-2?Q?n=B1_edycj=B1?=
  Paweł wrote:
> Nie lubię instrukcji do MySQL, działa mi na nerwy.
> Do PHP instrukcja jest znacznie lepsza.

Jak dla mnie to są porównywalne.

--
../ premax
../ premax@hot.pl
../ koniec i bomba, a kto czytal ten traba. w.g.




=?ISO-8859-2?Q?Pawe=B3?= - 24-07-2007 00:13
=?ISO-8859-2?Q?Re=3A_=5BMySQL_4=2E0=2E=2E=2E4=2E1=5D_zabez?== ?ISO-8859-2?Q?pieczenie_przed_jednoczesn=B1_edycj=B1?=
  Przemyslaw Popielarski napisał(a):
> Paweł wrote:
>> Nie lubię instrukcji do MySQL, działa mi na nerwy.
>> Do PHP instrukcja jest znacznie lepsza.
>
> Jak dla mnie to są porównywalne.
>

W instrukcji MySQL jest dużo haseł gdzieś ukrytych w treści i później
muszę ich szukać przez ctrl+f (mam na myśli format HTML Help).

Np. Chapter 13. SQL Statement Syntax
Do jednego worka zostało wrzuconych tak wiele rzeczy (duża objętość).

W PHP np. wpisuje strpos i od razu w wynikach wyszukiwania widzę:
"strpos" - mam wszystko co potrzebuję plus dodatkowo linki na dole do
pokrewnych haseł.

W MySQL wpisuję np. "affected" i dostaję kilkadziesiąt wyników - nigdzie
w nazwie nie widzę tego słowa - muszę wchodzić wszędzie i szukać tego
słowa przez ctrl+f - zniechęca mnie to.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Gdzie MySQL 4.1, a gdzie 5.0? [MS SQL] "set names" (mySQL) w MS SQL oracle -> oracle lub oracle -> mysql replikacja - programy [mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu. [MySQL] Zwrot tego, co pasuje i nie pasuje :-/ [pgsql] Dostosowanie składni MySQL 5.0 -> PGSQL 8.1 [mysql] galeria zdjec - numerowanie zdjec [MySQL] Zapytanie z pliku , wynik do pliku [mysql] CONCAT agregujący, ale nie GROUP_CONCAT() mysql data 0000-00-00 na koniec
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tejsza.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com