webForumDet fria alternativet

ID på det jag just lade in i databasen

PHP

9 svar · 273 visningar · startad av nkrantz

Medlem sedan apr. 2002830 inlägg
Frågan#1

Hej!

Vill att mitt PHP script skall kunna visa vilket ID en viss nyss insatt post i databasen fick. Nu gör jag så att jag efter inserten hämtar upp den posten genom att i WHERE satsen ange de värden som just sattes in och sorterar på ID DESC.. men det känns som om det borde finnas något inbyggt sett.. sökte runt lite men hittade inget...

förslag? :q

//Nippe

Medlem sedan dec. 200012 464 inlägg
#2

Beror på vilken databashanterare du använder

Mysql:

select last_insert_id()

Medlem sedan apr. 2002830 inlägg
#3

Så klart det gör det :r

Tack, skall testa

select last_insert_id()

//Nippe

Medlem sedan apr. 2002830 inlägg
#4

Hm.. kom iofs att tänka på en sak.. säg att man har ett stort tryck på databasen å SQL frågorna lägger sig på kö, så kör en användare en fråga, sedan så tillåter dbhs:en att en annan användare kommer mellan å kör en fråga. Om den första användaren då använder last_insert_id() så får ju han upp det som den andra användaren lade in. Eller är sånt kanske löst på något smart sätt redan?

// Frågvise nippe

Medlem sedan dec. 200012 464 inlägg
#5

Det är just det som last_insert_id() hanterar. Du får rätt ID oavsett om någon annan gör insert i samma tabell samtidigt.

Medlem sedan jan. 2000372 inlägg
#6

Är det inte bättre att använda PHP-funktionen mysql_insert_id() för att vara säker på att få senaste ID från den databaskoppling man använder?

Medlem sedan apr. 2002830 inlägg
#7

Hm.. oki, det funkar typ... hittade lite kod här på WF som jag implementerade å ändrade lite i... men då jag kör last_insert_id(id) så returnerar mysql alla raderna i tabellen... koden nedan gör så att jag får den sista, men det känns som om jag har gjort fel någonstans... :r

$query = "SELECT last_insert_id(id) FROM tbl_event ORDER BY id DESC";
				$result = mysql_query($query) or die(mysql_error());
				$row = mysql_fetch_array($result);
				$id = $row[0];

// Nippe

Medlem sedan mars 20007 896 inlägg
#8

Det är rätt, men jag håller med Mungo - varför inte använda PHP's inbyggda funktion för det här? Se så enkelt:

$id = mysql_insert_id();
Medlem sedan mars 2000263 inlägg
#9

Om man kör med BIGINT på autoinc-fältet så funkar inte mysql_insert_id() som det ska. Då ska man använda selst last_insert_id(), annars är mysql_insert_id nog det bästa alternativet

Medlem sedan apr. 2002830 inlägg
#10

okej, bra att veta i fortsättningen!

SPiNs förslag funkade alldeles utmärkt:

$id = mysql_insert_id();

Tackar för hjälpen!

// nippe - nu glad!

252 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)