Avatar billede Slettet bruger
02. marts 2008 - 13:19 Der er 29 kommentarer og
1 løsning

Finde identifikationsværdi efter MySQL query

Hej eksperter!

En lille problemstilling...
Jeg har en tabel (her er et enkelt eksempel anvendt) med følgende kolonner: id (auto_increment), vara (text eller lignende) og varb (som vara). Så indsætter jeg data som følger:

mysql_query("INSERT INTO sometable (vara, varb) VALUES ('test1', 'test2')");
$aktuel_id = "Hvordan gør jeg så?";

Hvordan får jeg så $aktuel_id til at være id for den ovenfor indsatte data i tabellen?
Avatar billede erikjacobsen Ekspert
02. marts 2008 - 13:26 #1
Avatar billede Slettet bruger
02. marts 2008 - 13:32 #2
Warning

mysql_insert_id() konvertere typen der bliver returneret fra den oprindelige MySQL C API fuktion mysql_insert_id() til en long type (navngivet int i PHP). Hvis din AUTO_INCREMENT kollonne har en kollonne af typen BIGINT, vil værdien af mysql_insert_id() være forkert. Brug istedet MySQL SQL funktionen LAST_INSERT_ID() i en SQL forespørgsel.


D'oh. Min 'id' er BIGINT. Kan du give et eksempel på LAST_INSERT_ID()? Eller... Er det:
mysql_query(LAST_INSERT_ID());? Og hvis det er, hvordan skal jeg så bruge det (f.eks. til at sætte '$aktuel_id')?
Avatar billede jensgram Nybegynder
02. marts 2008 - 13:45 #3
'SELECT LAST_INSERT_ID() AS xxx FROM tabel' - et gæt
Avatar billede jensgram Nybegynder
02. marts 2008 - 13:46 #4
=> $id = mysql_result(mysql_query('SELECT LAST_INSERT_ID() FROM tabel'), 0, 0);
Avatar billede Slettet bruger
02. marts 2008 - 14:10 #5
Eller
$id = mysql_result(mysql_query('SELECT * FROM LAST_INSERT_ID()'), 0);
?
Avatar billede Slettet bruger
02. marts 2008 - 14:15 #6
$aktuel_id = mysql_result(mysql_query("SELECT LAST_INSERT_ID() from $sometable"), 0);
fra
http://www.issociate.de/board/post/177909/PHP_MySql_last_insert_id()_question.html

Er det så rigtigt?
Avatar billede Slettet bruger
02. marts 2008 - 14:15 #7
*  $aktuel_id = mysql_result(mysql_query("SELECT LAST_INSERT_ID() FROM sometable"), 0);
Men er det rigtigt???
Avatar billede erikjacobsen Ekspert
02. marts 2008 - 15:15 #8
Er din autoincrement ikke bare en int ?
Avatar billede Slettet bruger
02. marts 2008 - 16:02 #9
Nej... BIGINT.
Og ja, jeg har tjekket, om INT kan slå til. Det kan den ikke.
Avatar billede jensgram Nybegynder
02. marts 2008 - 19:58 #10
Ja, det giver vel egentlig mest mening, hvis "FROM ..." delen undlades ...
Avatar billede Slettet bruger
02. marts 2008 - 20:46 #11
Erik, er det rigtigt, så?
$aktuel_id = mysql_result(mysql_query("SELECT LAST_INSERT_ID() FROM sometable"), 0);
Eller skulle FROM, som Jens forslår, undlades?
Avatar billede jensgram Nybegynder
03. marts 2008 - 14:25 #12
Har du ikke mulighed for at prøve dig frem?
Avatar billede Slettet bruger
03. marts 2008 - 15:05 #13
Nej... EasyPHP virker ikke på min computer, ingen kan finde ud af hvorfor og jeg har ikke umiddelbart mulighed for at opsætte systemet op en funktionel server.
Avatar billede erikjacobsen Ekspert
03. marts 2008 - 15:07 #14
Jo, det ser rigtigt ud, uden FROM ... check altid op mod kilden: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

Jeg kan ikke huske jeg har haft PHP til at arbejde med mere end ints (-2 milliarder til  2 milliarder).

Med en unsigned int kan du komme op på 4 milliarder. Det er een i sekundet de næste 125 år (cirka).
Avatar billede Slettet bruger
03. marts 2008 - 15:24 #15
Ja... Jeg ved godt, BIGINT virker overdrevet, men jeg vil helst være på den sikre side og tage en større værdi.
--
Altså bare:
$aktuel_id = mysql_result(mysql_query("SELECT LAST_INSERT_ID()"), 0);
?
Avatar billede erikjacobsen Ekspert
03. marts 2008 - 15:45 #16
Det skal jo prøves, og du ved først om det virker efter du er kommet over et antal milliarder rækker. Jeg ville nok nøjes med en int og se hvad der sker. Kommer du op i milliarder af rækker er der nok helt andre ting du skal overveje
Avatar billede jensgram Nybegynder
03. marts 2008 - 15:51 #17
Med mindre han tynder kraftigt ud undervejs :)
Avatar billede Slettet bruger
03. marts 2008 - 15:53 #18
Tja. Men at bruge INT frem for BIGINT fortæller mig stadig ikke, hvordan LAST_INSERT_ID virker ;P
Avatar billede Slettet bruger
04. marts 2008 - 18:28 #19
Kan en af jer teste det?
Avatar billede erikjacobsen Ekspert
04. marts 2008 - 19:07 #20
Jeg kunne vel, men jeg vil ikke - det er ikke noget personligt ;)
Avatar billede Slettet bruger
05. marts 2008 - 09:05 #21
Okay så :P Bare smid et par svar, så må jeg prøve igen om nogle måneder, når jeg får en ny computer.
Avatar billede erikjacobsen Ekspert
05. marts 2008 - 09:27 #22
Okay ;)  Jeg samler slet ikke på point, tak.
Avatar billede jensgram Nybegynder
05. marts 2008 - 09:35 #23
Hmmm - i en simpel test-tabel, kan jeg kun få LAST_INSERT_ID() til at returnere 0!
Avatar billede Slettet bruger
05. marts 2008 - 09:55 #24
> Hmmm - i en simpel test-tabel, kan jeg kun få LAST_INSERT_ID() til at returnere 0!
Det er vel fordi, du igen operation har udført? Eller fordi du ingen auto_increment har?
Avatar billede jensgram Nybegynder
05. marts 2008 - 10:00 #25
Opretter tabel som foreskrevet i http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id men det funger ikke rigtigt :(
Avatar billede erikjacobsen Ekspert
05. marts 2008 - 12:50 #26
Og du skal huske at det skal være på den samme connection, og umiddelbart efter en INSERT.
Avatar billede jensgram Nybegynder
06. marts 2008 - 09:30 #27
Erik > Det er da også rigtigt :) Så hjælper phpmyadmin ikke meget!
Avatar billede Slettet bruger
02. maj 2008 - 09:57 #28
Hovsa, af en eller anden grund må jeg have glemt denne tråd. Giv mig lige nogle svar så jeg kan få lukket skidtet :P
Avatar billede erikjacobsen Ekspert
02. maj 2008 - 11:19 #29
Ingen points til mig, tak. Samler ikke.
Avatar billede Slettet bruger
02. maj 2008 - 17:09 #30
Hm. Så bliver det point til mig selv :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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