PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Turvalisus GET ID
Postitaja: Trt 2016-02-17 00:00:46
Kas kasulik on teha ID=number (ID=1) või võib ka olla ID=tekst (ID=esimene)

Mis on nende põhilised erinevused ja vead, kui teha?
RE: Turvalisus GET ID
Postitaja: peaminister (R) 2016-02-17 04:58:57
üks on number, teine on tekst
RE: Turvalisus GET ID
Postitaja: geo__ 2016-02-17 09:16:37
TSITEERITUD:
Kas kasulik on teha ID=number (ID=1) või võib ka olla ID=tekst (ID=esimene)

Mis on nende põhilised erinevused ja vead, kui teha?


ID on ikka number, sest:
Andmebaasis genereeritakse igale reale id mis on unikaalne.
http://www.w3schools.com/sql/sql_unique.asp
See garanteerib, et sa sul ei tekiks mitut sama ID-ga asja.
Kui ID oleks string, siis seda nii lahendada ei saaks.
Võib juhtuda, et andmebaasis on mitu rida mille ID=esimene.
Kuidas sa siis selle õige tuvastad?

RE: Turvalisus GET ID
Postitaja: peaminister (R) 2016-02-17 13:12:26
TSITEERITUD:


ID on ikka number, sest:
Andmebaasis genereeritakse igale reale id mis on unikaalne.
http://www.w3schools.com/sql/sql_unique.asp
See garanteerib, et sa sul ei tekiks mitut sama ID-ga asja.
Kui ID oleks string, siis seda nii lahendada ei saaks.
Võib juhtuda, et andmebaasis on mitu rida mille ID=esimene.
Kuidas sa siis selle õige tuvastad?

vabalt võib "primary key" luua ka tekstiväljale, lihtsalt palju lihtsam on arvudega tehteid tehe: a == 3; a++; a == 4 kui teha seda teksti jaoks: a == 'kolmas'; a = f(x); a == 'neljas';
RE: Turvalisus GET ID
Postitaja: geo__ 2016-02-17 14:57:12
TSITEERITUD:
vabalt võib "primary key" luua ka tekstiväljale, lihtsalt palju lihtsam on arvudega tehteid tehe: a == 3; a++; a == 4 kui teha seda teksti jaoks: a == 'kolmas'; a = f(x); a == 'neljas';


Sellisel juhul võib läbi perse hambaid ka ravida, aga kas peaks?
Aga kuidas siis Auto increment andmebaasis toimib, kui primary key on tekstina?
Minuteada saab auto increment olla ainult unikaalne number.
Lase ikka andmebaasil genereerida igale kirjele unikaalne ID, mitte et ise meisterdad mingi scriptiga, sellest ei tule midagi head.

RE: Turvalisus GET ID
Postitaja: Haug 2016-02-17 15:39:16
Kasuta ikka numbreid.. stringe kasutades kaevad endale auku.
RE: Turvalisus GET ID
Postitaja: blaa 2016-02-17 15:45:26
teate, ma arvan, et teema algataja mõtleb hoopis urli
RE: Turvalisus GET ID
Postitaja: peaminister (R) 2016-02-17 16:25:24
TSITEERITUD:


Sellisel juhul võib läbi perse hambaid ka ravida, aga kas peaks?
Aga kuidas siis Auto increment andmebaasis toimib, kui primary key on tekstina?
Minuteada saab auto increment olla ainult unikaalne number.
Lase ikka andmebaasil genereerida igale kirjele unikaalne ID, mitte et ise meisterdad mingi scriptiga, sellest ei tule midagi head.

"primary key" ei pea tingimata olema "autoincrement", mõningal juhul ma kasutaks int asemel char tüüpi, nt. "valuuta":

-- lihtsuse mõttes vaid kaks veergu
create table Valuuta (id char(3) not null primary key, title varchar not null);

insert into Valuuta (id, title) values ('USD', 'Ameerika dollar'), ('SEK', 'Rootsi kroon');

-- hiljem kusiganes päringus on palju arusaadavam kirjutada:

where Valuuta.id = 'USD'

-- või
where Valuuta.id in ('SEK', 'USD')



kuijuta nüüd ette, et sul on päring:

where Valuuta.id in (2, 1)

pole just väga loetav

RE: Turvalisus GET ID
Postitaja: geo__ 2016-02-17 17:57:05
TSITEERITUD:
"primary key" ei pea tingimata olema "autoincrement", mõningal juhul ma kasutaks int asemel char tüüpi, nt. "valuuta":

-- lihtsuse mõttes vaid kaks veergu
create table Valuuta (id char(3) not null primary key, title varchar not null);

insert into Valuuta (id, title) values ('USD', 'Ameerika dollar'), ('SEK', 'Rootsi kroon');

-- hiljem kusiganes päringus on palju arusaadavam kirjutada:

where Valuuta.id = 'USD'

-- või
where Valuuta.id in ('SEK', 'USD')



kuijuta nüüd ette, et sul on päring:

where Valuuta.id in (2, 1)

pole just väga loetav


Nii jääb sul süsteemi nõrk koht, näiteks kui sisestatakse baasi vigaselt (alati juhtub!)
values ('USD', 'Ameerika dollar'), values ('USD', 'Just some shit'), values ('USD', 'Whatewer mistake dollar')

Oletame, et tahad nüüd vigase kirje kustutada:
delete where Valuuta.id = 'USD', kõik kolm on läinud.
Select ja Update -iga ka jamad.
Unikaalne id ongi selleks et igale konkreetsele kirjele läheneda personaalselt.
PS! Select where Valuuta.short = 'USD' võid ikka teha kui tahad, id piiranguid ei sea.
RE: Turvalisus GET ID
Postitaja: peaminister (R) 2016-02-17 18:53:13
TSITEERITUD:

Nii jääb sul süsteemi nõrk koht, näiteks kui sisestatakse baasi vigaselt (alati juhtub!)
values ('USD', 'Ameerika dollar'), values ('USD', 'Just some shit'), values ('USD', 'Whatewer mistake dollar')

Oletame, et tahad nüüd vigase kirje kustutada:
delete where Valuuta.id = 'USD', kõik kolm on läinud.
Select ja Update -iga ka jamad.
Unikaalne id ongi selleks et igale konkreetsele kirjele läheneda personaalselt.
PS! Select where Valuuta.short = 'USD' võid ikka teha kui tahad, id piiranguid ei sea.


create table Valuuta (id char(3) not null primary key, title varchar not null);

primary key hoolitseb selle eest, et kahte või enamat 'USD' väärtust id veergu ei tekiks

sinu näide annab errori kui neid niiviisi kolmekordselt sisse laduda

ehk kui on:

values (2, 'Ameerika dollar'), values (2, 'Just some shit'), values (2, 'Whatewer mistake dollar')

saad sama vea, hoolimata, kas seal on id veeruks arv või tekst
RE: Turvalisus GET ID
Postitaja: jkl54 2016-02-17 18:58:40
TSITEERITUD:


ID on ikka number, sest:



stringe primaarsete võtmetena ksutatakse näiteks, kui tarvis on kirje unikaalsust rohkem, kui ühe andmebaasi piires.
teine mõte. näiteks tabel kus on salestatud kõik maailma keeled vmt oleks mugav primaarse võtmena kasutada nt 'et'(mingi korrektne iso verioon vbl) - jääb ära ports joine jmt - lühend on unikaalne, sobib andmebaasi jaoks, ja samuti mõistetav kasutajale.
kolmas mõte, string tüüpi primary key on raskem ära arvata.
RE: Turvalisus GET ID
Postitaja: ise php 2016-02-17 20:16:32
TSITEERITUD:
"primary key" ei pea tingimata olema "autoincrement", mõningal juhul ma kasutaks int asemel char tüüpi, nt. "valuuta":

-- lihtsuse mõttes vaid kaks veergu
create table Valuuta (id char(3) not null primary key, title varchar not null);

insert into Valuuta (id, title) values ('USD', 'Ameerika dollar'), ('SEK', 'Rootsi kroon');

-- hiljem kusiganes päringus on palju arusaadavam kirjutada:

where Valuuta.id = 'USD'

-- või
where Valuuta.id in ('SEK', 'USD')



kuijuta nüüd ette, et sul on päring:

where Valuuta.id in (2, 1)

pole just väga loetav



Siin sa veidi eksid, sa ei tee päringut mitte ID peale vaid sul on tabelis lahter

valuutanimi

ja on ka eraldi ID nagu ikka numbriline ja unikaalne

nüüd teed oma päringu hoopis

where Valuuta.valuutanimi = 'USD'
RE: Turvalisus GET ID
Postitaja: ise php 2016-02-17 20:19:43
Ja ennetades küsimust, milleks siis veel ID toon näite. Ütleme, et sul on kolm USD väärtusega rida tabelis ja tekkib nüüd soov neist keskmist kusagil kasutada, siis saad selle ID abil välja võtta, USD ei anna seal kuidagi ju kasutada, sest neid on sul kolm sarnast rida.
RE: Turvalisus GET ID
Postitaja: blaa 2016-02-17 22:17:02
täiesti mõttetu vaidlus
primary_key võib olla vabalt tekst, pead oskama lihtsalt seda kasutada. Kui ei oska, siis ei oska, siis kasutad inti + teksti eraldi veerus.
Mul on suurel hulgal tabelitest id veerg kui selline eraldiseisev int, mis infot juurde ei anna, üldse puudu. Kasutan unique_key üle mitme veeru (col1, col2) ja pole probleemi, on seal siis tekst või int pole vahet, kustutan/muudan nii .. where col1=X and col2=Y.
RE: Turvalisus GET ID
Postitaja: peaminister (R) 2016-02-18 04:36:04
TSITEERITUD:
Ja ennetades küsimust, milleks siis veel ID toon näite. Ütleme, et sul on kolm USD väärtusega rida tabelis ja tekkib nüüd soov neist keskmist kusagil kasutada, siis saad selle ID abil välja võtta, USD ei anna seal kuidagi ju kasutada, sest neid on sul kolm sarnast rida.


ma tahtsin öelda, et mul on ainult üks unikaalne 'USD', mis on ühtlasi primary key

primary key tähendabki tabelis unikaalsust

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0885169506073