Avatar billede x4all_dk Nybegynder
22. november 2005 - 13:28 Der er 7 kommentarer og
2 løsninger

Få id ved insættelse!

Hvis jeg har 1.000 mennesker som samtidigt opretter en bruger i mit system (PHP 4, MySQL 4.0.18) vil jeg gerne have det rigtige bruger_id ud.

Jeg har noget kode som dette:

// Opret bruger, user_id er AUTO_INCREMENT
INSERT INTO Bruger (user_id,user_name) VALUES ('','test')

// hent brugerid:
$bruger_id = mysql_insert_id();

// indsæt et eller andet ind i en anden table
INSERT INTO SJOV (user_id,sjov) VALUES ('$bruger_id','sjov')


Nu vil jeg jo gerne sikre mig at mysql_insert_id() returnere DENNE brugers user_id og ikke en som i samme sekund også trykkede på "opret".

Jeg kan ikke helt læse mig til hvad HELT PRÆCIST mysql_insert_id() returnerer.... så jeg ved ikke om jeg skal lave LOCK / UNLOCK eller om mysql_insert_id() simplethen giver denne "user-conenctions last inserted user_id"


Jeg vil være glad for om en kunne cementere at mysql_insert_id() er sikker at bruge, ellers skal jeg bruge kode til at LÅSE eller evt. noget med Transaction ...
Avatar billede hmortensen Nybegynder
22. november 2005 - 13:33 #1
Den er sikker, den returnere kun den der er indsat i samme connection, ergo i samme script kørsel.
Avatar billede x4all_dk Nybegynder
30. november 2005 - 09:59 #2
Er der flere som kan bekræfte det ? (evt. med reference)
Avatar billede hmortensen Nybegynder
30. november 2005 - 10:04 #3
Avatar billede nielle Nybegynder
30. november 2005 - 10:09 #4
Fra MySQL dokumentationen:

http://dev.mysql.com/doc/refman/5.0/en/mysql-insert-id.html

Citat:

"The value of mysql_insert_id() is affected only by statements issued within the current client connection. It is not affected by statements issued by other clients."
Avatar billede hmortensen Nybegynder
30. november 2005 - 10:28 #5
Og nielle fandt så det link jeg ikke lige kunne hitte ;)
Avatar billede arne_v Ekspert
30. november 2005 - 15:59 #6
det er sådan for alle databaser - en værdi delt mellem alle processer
ville være ubrugeligt
Avatar billede x4all_dk Nybegynder
01. december 2005 - 09:34 #7
Så kan jeg sove roligt ingen :)

Jeg har desværre en 'feature' et sted i mit system, og måtte være helt sikker på at at
mysql_insert_id(); returnere den enkeltes sidste indsatte ID!  Tak for i brugte lidt tid på mit spørgsmål.

Der er point til alle som har deltaget ovenover, hvis de svarer.
Avatar billede nielle Nybegynder
08. december 2005 - 22:39 #8
Så må vi vel hellere lægge nogle svar :^)
Avatar billede hmortensen Nybegynder
09. december 2005 - 08:17 #9
:)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester