30. juli 2005 - 12:34Der er
13 kommentarer og 1 løsning
Give et fortløbende reservationsnummer efter bestilling
Hej Eksperter Jeg vil gerne give brugerne af mit billetsystem et reservationsnummer, som er fortløbende, efter de har bestilt en billet. Det kunne jo f.eks. være $id (den primære nøgle i tabellen) Men hvordan henter jeg $id på den INSERT der netop er lavet
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Ja vi snakker mysql Og selvfølgelig LIMIT - jeg havde lige glemt mysql limit funktionen det er jo en nem måde at gøre det på. Men jeg kan godt se at den anden funktion er som skabt til formålet. Så den prøver jeg først og kan så falde tilbage på den anden:) Tak for hjælpen begge to gider I smide et svar pls
Den er ikke "som skabt" - den "er skabt" til formålet. Brugen af den har endvidere den fordel at man sparer et SQL-kald til basen for at finde det seneste indsatte, samt at man er sikret imod den (sikkert sjældne situation) hvor der er to brugere som er ved at oprette en ordre på samme tid.
Jeg støtter lige op omkring nielles påstand her. At lave et ekstra sql-kald vil være fuldstændig overflødig brug af ressourcer, når man nu har mysql_insert_id-funktionen. Desuden vil det med at lave et ekstra sql-kald også kunne give problemer, hvis scriptet køres 2 eller flere gange samtidigt af forskellige brugere.
Kendte ikke til funktionen, som nielle har vist, men det er smart. DOG ville jeg ikke bruge den her, for hvad nu hvis der er to brugere der bestiller samtidig. Så kunne en af brugerne vel godt få vist det forkerte brugernummer, eller hvad?
Det jeg plejer at gøre, er selvfølgelig at inserte de informationer, der nu engang skal insættes. Derudover indsætter jeg brugeren session_id, fordi jeg efterfølgende så kan gøre som mysli foreslår: SELECT id FROM tabel WHERE sessionid = '$PHPSESSID' ORDER BY id DESC LIMIT 0,1
Det ville jeg mene er mere sikkert - men som sagt, så kender jeg ikke nielles funktion tilstrækkeligt...
"The last ID that was generated is maintained in the server on a per-connection basis. This means the value the function returns to a given client is the most recent AUTO_INCREMENT value generated by that client. The value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that you can retrieve your own ID without concern for the activity of other clients, and without the need for locks or transactions."
Der skulle m.a.o. ikek være nogen problemer med samtidige brugerer.
Derimod må jeg påpege at $PHPSESSID ikke er garanteret at være unik, og at den faktisk heller ikke er det.
Det lyder jo som om der er tænkt på det hele. Det vil jeg da til at bruge i fremtiden!
Ved godt at $PHPSESSID ikke er unik i ordets egentlige forstand, men men 32 tegn - bogstaver og tal - er det i endnu mere sikkert, end at man ikke vinder i Lotto, at to brugere får præcist samme sessionid. Der er milliarder af kombinationsmuligheder, og jeg tør derfor godt bruge det :-)
Jeg har faktisk oplevet et enkelt tilfælde hvor de netop havde forsøgt at bruge PHPSESSID som primary key - det gik ikke godt. Det værste var at de jo havde kørt nogle år før at det begyndte at gå galt, så der var temmeligt meget data i deres base som skulle tjekkes igennem for fejl.
Man skal aldrig sige aldrig - det er jo trods alt også set, at folk vinder i Lotto. Alligevel mener jeg, at risikoen er så forsvindende lille, at man godt kan leve med det.
Hvis der findes bedre/mere sikre måder, hører jeg (og formodentlig også andre) selvfølgelig gerne om det :-) Tænker her på måden man opbygger f.eks. et shoppingsite eller andet på, hvor der er behov for "sikkerhed".
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.