| Hkratni vnosi v podatkovno bazo (PHP MySQL) | ||
|---|---|---|
|
thomass
20. apr 2016 06:16:25
Pridružen od: 30. avg 2011 20 objav 21 0 0 |
#1
Pozdravljeni! Po spletu nisem našel točnega odgovora, ali pa nisem znal zastaviti vprašanja. Zanima me, kaj se zgodi, če na spletni strani, ki beleži prijave v podatkovno bazo (1 tabela), dva obiskovalca izpolnita obrazec v istem trenutku. Povezava se vzpostavi z mysqli_connect, vnos pa se izvede s pomočjo mysqli_query - za tem se povezava zapre. Če se v takem primeru zabeleži samo ena prijava, me zanima, kako bi se to preprečilo. Nekaj sem prebiral o MySQL transactions, ampak na tem področju še nisem delal - je to pravi način? |
|
|
carli
20. apr 2016 06:19:40
Pridružen od: 5. avg 2008 1258 objav 583 54 17 |
||
|
Javornik
20. apr 2016 06:21:59
Pridružen od: 15. jun 2010 431 objav 375 27 4 |
#3
Po domače bi ti razložil tako, da se queryiji postavijo v vrsto in se izvajajo eden za drugem. Sigurno pa se dva querya ne moreta izvesti ob popolnoma enakem času oziroma hkrati. Mysql server zna to pohendlat. |
|
|
thomass
20. apr 2016 06:43:04
Pridružen od: 30. avg 2011 20 objav 21 0 0 |
#4
Če prav razumem - do opisanega scenarija (manjkajoče prijave, zgolj zaradi opisane povezave spletne strani z bazo) ne more priti? Hvala za odgovor. |
|
|
pavarti
20. apr 2016 08:51:11
Pridružen od: 26. okt 2011 445 objav 587 92 14 |
#5
Če dva uproabnika pošljeta poizvedbo se bosta izvedle obe. Transakcije ni potrebno uporabljati. Le ta se uporablja za bolj zahtevne zadeve npr. brišeš več različnih zapisov, ki so med sabo povezani. V primeru da vmes pride do napake, transakcijo prekineš in podatki se "resetirajo" na stanje pred začetkom transakcije. |
|
|
Spartacus
20. apr 2016 10:27:44
Pridružen od: 23. dec 2007 642 objav 828 38 4 |
#6
Sej verjetno je "no brainer", ampak: Vse zgoraj napisano velja ob predpostavki, da se vrednost primarnega ključa (npr. id zapisa) generira na strani baze (npr. autoincrement). Naleti se pa tudi na implementacije, kjer se iz baze prebere zadnji ID, se ga "ročno" poveča za 1 in se ga uporabi v sql insertu. V takšnem primeru so pa lahko težave (poleg tega, da se tega sploh ne bi smelo delat :) ). |
|
|
svizec
20. apr 2016 10:34:22
Pridružen od: 7. mar 2007 280 objav 164 23 10 |
#7
Ok, to se sploh ne sme delat, ampak v primeru da je, pa potem verjetno tudi polje ID ni unique in bi spet obe poizvedbi zapisalo in bi obe obstajale... In če bi klical po ID-ju bi potem dobil pač 2 zapisa... |
|
|
Spartacus
20. apr 2016 10:43:26
Pridružen od: 23. dec 2007 642 objav 828 38 4 |
#8
Ne, se ne sme tega delat :) Ampak tole je precej pogost kiks, ki se pojavlja predvsem v kakšnih "študijskih" primerih, ko se človek še malenkost uči kako in kaj. In če z mojim offtopicom vsaj enega (bodočega) developerja odvrnem od početja tega, then my work here is done :) |
|
|
thomass
21. apr 2016 06:10:20
Pridružen od: 30. avg 2011 20 objav 21 0 0 |
||