Editið var bara eitthvað sem ég fann um hvernig á að kalla á MSSql stored procedures úr PHP, sýna reyndar líka hvernig á að búa procedure til.
Þegar þú ert búinn að búa til procedure er hann geymdur í gagnagrunninum og þú getur kallað í hann aftur og aftur og aftur .. etc. Þú átt að nota procedures, td. þegar þú villt ekki að notendur hafi beinan aðgang af töflunni þinni. Einnig eru þeir (
yfirleitt) öflugrri og hraðvirkari. Procedures tryggja líka ákveðið öryggi því það er ekki hægt að setja inn sql skipanir sem færibreytu. Td.:
bjánaleg leið til að aðgreina eftirfarandi frá meginmáli.. skrifaði:Ert með loggin síðu sem skilar þeir tveim færibreytum, @username og @password, og sendir þær beint í gagnagrunninn:
select * from users where username = '@username' and '@password'
svo ert checkað á því hvort select skipuninn skili færslu eða ekki.
Ef það er slegið inn jón og mús í username/password verður fyrirspurnin:
select * from users where username = 'Jón' and password = 'mús'
En, ef þú hinsvegar slærð bara inn ' or 1==1 ' (ath, með ' ) verður fyrirspurnin:
select * from users where username = '' or 1==1 ' and password = ''
Sem er alltaf satt og kerfið myndi halda að fyrsti notandinn sem select * from users skilar hafi loggað sig inn í kerfið þitt. and password = hlutinn breytist í streng og er því aldrei framkvæmdur. Eina sem er gert er athugað hvort username sé tómur strengur eða 1==1, sem er náttúrulega alltaf satt.
Með því að nota procedures er komið í veg fyrir að þetta sé hægt.. en þetta er kannski aðeins út fyrir efnið.
Það sem þessi procedure (
gnarrInsert) gerir er að taka eina int breytu og inserta henni í einhverja töflu, og skilar svo @@identity gildinu. Ef þú myndir búa hann til geturðu prófað hann með:
exec gnarrInsert 1
Þú getur haft eins margar færibreytur og þú villt. Procedure skila líka öllum gildum úr öllum select skipunum sem hann inniheldur, nema það sé um gildisveitingu að ræða (
td.: select @breyta = dálkir from ..)
Þetta var kannski svoldið almennt með alltof löngu hliðarspori um öryggi en ef þú kemur með nákvæmari spurningar þá skal ég reyna að gefa nákvæmari svör
.. og nenni kannski að lita sqlið.
edit:
Sko, pointið er að þú býrð til procedure í grunninum þínum og notar svo
mssql_init(),
mssql_bind() og
mssql_execute() til að kalla í hann úr PHP. Get skrifað þetta fyrir þig ef þú lýsir betur því sem þú ert að gera og gefur mér upp td. töflu skemað sem þú ert að nota.