webForumDet fria alternativet

Få fram ID:et och lägga den i en variabel efter att man har skapat den?

Databaser & SQL

7 svar · 754 visningar · startad av medialabs

Medlem sedan mars 20023 686 inlägg
Frågan#1

Hej,

Jag kom precis på en sak, Jag har en sida där jag gör en INSERT till min MySQL-databas (registrerar ny användare) nästa steg efter detta är att jag skickar uppgifterna, username, lösenord och tidpunkt genom ASPEmail, MEN! Jag vill också skicka med ID:et för den INSERTEN, hur får jag reda på vad ID:et i fältet strID är för den nyskapade INSERTEN, vill lägga den i en variabel döpt till t.ex. UniktID?

Misstänker att man måste skapa en ny rad under denna INSERT döpt till SQL2 = GET/SELECT NYASTE ID?

Klockan är sent och jag ber om ursäkt om det slinker med några stavfel i mitt inlägg eller om jag nu krånglade till det.

	SQL1 = "INSERT INTO tbluppgifter (strusername, strpassword, strreggad) VALUES " & _
		"('" & Trim(FixInject(Request.Form("anvandarnamn"))) & "'" & _
		", '" & sMD5Password & "'" & _
		", '" & Now() & "')"
Medlem sedan mars 20032 667 inlägg
#2

last_insert_id() i mysql eller mysql_insert_id() i PHP ger dig senast inlagda postens "räknar"-fält.

Medlem sedan mars 20023 686 inlägg
#3

K@llen skrev:

last_insert_id() i mysql eller mysql_insert_id() i PHP ger dig senast inlagda postens "räknar"-fält.

Använder ASP tillsammans med MySQL. Jag har nu försökt läsa på lite om last_insert_id().

Som jag har tolkat detta så måste den köras i samma "query" eller INSERT? Jag testade att skapa SQL2 och köra denna efter min INSERT i SQL1, men då fick jag fram föregående ID och inte den som jag precis skapade.

men hur får jag in last_insert_id till en variabel egentligen om den ska köras i samma fråga?

SELECT LAST_INSERT_ID() AS NyttID FROM tbluppgifter
	SQL1 = "INSERT INTO tbluppgifter (strusername, strpassword, strreggad) VALUES " & _
		"('" & Trim(FixInject(Request.Form("anvandarnamn"))) & "'" & _
		", '" & sMD5Password & "'" & _
		", '" & Now() & "')"
' ## Stänger anslutningen till databasen
	ConnectREG.Open strConn
	ConnectREG.Execute SQL1, , 128
	ConnectREG.Close
	Set ConnectReg = Nothing

Tror jag har förvirrat bort mig helt och hållet nu.. :e

Medlem sedan mars 20023 686 inlägg
#4

Tänkt efter lite till:


SQL1 = "INSERT INTO tbluppgifter (strusername, strpassword, strreggad) VALUES " & _
		"('" & Trim(FixInject(Request.Form("anvandarnamn"))) & "'" & _
		", '" & sMD5Password & "'" & _
		", '" & Now() & "')"

	ConnectREG.Open strConn
	ConnectREG.Execute SQL1, , 128

SQL1 = "SELECT LAST_INSERT_ID() AS nyid FROM tbluppgifter;"
ConnectREG.Execute SQL1, , 128

		
response.write nyid
response.end

Men nyid verkar inte innehålla något överhuvudtaget?!

Medlem sedan sep. 20005 700 inlägg
#5

Du ska inte köra den i samma fråga som Insert. Först exekverar du INSERT-frågan därefter kör du "SELECT LAST_INSERT_ID()" (obs. du behöver inte ange någon tabell) så hämtar den det ID som din senaste INSERT gav förutsatt att du använder dig av auto_increment.

Medlem sedan mars 20023 686 inlägg
#6

Gjorde ingen skillnad efter att jag döpte om den frågan till SQL2 och tog bort tabellnamnet.

Medlem sedan sep. 20005 700 inlägg
#7

Har du tillgång till en MySQL-terminal så kan du ju alltid testa manuellt att det fungerar.

Medlem sedan dec. 200012 464 inlägg
#8
SQL1 = "SELECT LAST_INSERT_ID() AS nyid "
set rs = ConnectREG.Execute(SQL1)

response.write rs("nyid")
response.end
260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)