02. marts 2008 - 13:19Der 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?
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')?
Ja, det giver vel egentlig mest mening, hvis "FROM ..." delen undlades ...
Synes godt om
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?
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.
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).
Synes godt om
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); ?
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
Hmmm - i en simpel test-tabel, kan jeg kun få LAST_INSERT_ID() til at returnere 0!
Synes godt om
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?
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.