webForumDet fria alternativet

Vad lade jag precis i databasen?

PHP

8 svar · 483 visningar · startad av nitro2k01

Medlem sedan aug. 20039 340 inlägg
Frågan#1

Jag har en sida som lägger till data i en MySQL-databas med mysql_query. Frågan är en INSERT INTO, där en rad, id, har auto_increment. Men hur får jag ut det jag precis lade in i databasen. (Dels för att skriva ut det och dels för att kolla att gick rätt till) Jag vet att jag kan gör en SELECT-sats med LIMIT 1 ORDER BY id DESC, men jag tycker att det borde finnas något sätt att få ut det man precis gjorde.
En rad är för användarnamn, och den är satt till unique. Är det ett bra sätt att undvika dubletter vid skapande av nya användare att göra en insert och kolla om den gick in? Eller bör man göra en select först? Användarnamnen lagras i lowercase.

Medlem sedan mars 20032 667 inlägg
#2

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

Medlem sedan aug. 20039 340 inlägg
#3

Finns det något sätt få ut hela den sista raden som insertades?

Medlem sedan aug. 20039 340 inlägg
#4

Dessutom så verkar inte mysql_insert_id funka för mig. Så här ser koden ut:

	$result = mysql_query($sql);
	echo "innan";
	echo mysql_insert_id($result);
	echo "efter";

"innan" och "efter" är strängar som jag lade där för att se att koden verkligen kördes.

Medlem sedan mars 20032 667 inlägg
#5

nitro2k01 skrev:

Finns det något sätt få ut hela den sista raden som insertades?

Inte vad jag känner till. Isf blir det nog att ställa en ny fråga direkt efter:

$sql = "SELECT aleb, bleb, cleb FROM table WHERE id = " . mysql_insert_id() . ";
Medlem sedan aug. 20039 340 inlägg
#6

Jag vill bara för sakens skull ha allt i samma fråga, så jag prövade frågan:

 	$sql="	INSERT INTO `users` (`username` , `passhash` , `hashsalt` )
	VALUES ('$uname', '$passhash', '13');
	SELECT * FROM `users` WHERE `id` = LAST_INSERT_ID(); ";

Men det gick inte som väntat. Frågan buggar totalt. Vad är fel?

Medlem sedan mars 20032 667 inlägg
#7

nitro2k01 skrev:

Dessutom så verkar inte mysql_insert_id funka för mig. Så här ser koden ut:

	$result = mysql_query($sql);
	echo "innan";
	echo mysql_insert_id($result);
	echo "efter";

"innan" och "efter" är strängar som jag lade där för att se att koden verkligen kördes.

Testa:

	$result = mysql_query($sql);
	echo "innan";
	echo mysql_insert_id();
	echo "efter";

Tog bort ditt argument.

Medlem sedan mars 20032 667 inlägg
#8

nitro2k01 skrev:

Jag vill bara för sakens skull ha allt i samma fråga, så jag prövade frågan:

 	$sql="	INSERT INTO `users` (`username` , `passhash` , `hashsalt` )
	VALUES ('$uname', '$passhash', '13');
	SELECT * FROM `users` WHERE `id` = LAST_INSERT_ID(); ";

Men det gick inte som väntat. Frågan buggar totalt. Vad är fel?

De flesta mysql-versioner har inte stöd för multibla anrop.

Medlem sedan aug. 20039 340 inlägg
#9

Då var problemet fullständigt löst! För att summera: Kalla mysql_insert_id() utan argument samt att bara fråga en sak i taget! Tack k@llen!

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)