webForumDet fria alternativet

Vad lade jag precis i databasen?

PHPur PHP

8 svar · 483 visningar · startad av nitro2k01

nitro2k01Medlem sedan aug. 20039 342 inlägg
#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.

K@llenMedlem 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. :)

nitro2k01Medlem sedan aug. 20039 342 inlägg
#3

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

nitro2k01Medlem sedan aug. 20039 342 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.

K@llenMedlem 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() . ";
nitro2k01Medlem sedan aug. 20039 342 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?

K@llenMedlem 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.

K@llenMedlem 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.

nitro2k01Medlem sedan aug. 20039 342 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!

129 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)