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.
Vad lade jag precis i databasen?
8 svar · 483 visningar · startad av nitro2k01
last_insert_id() i sql eller mysql_insert_id() i PHP ger dig senast inlagda postens "räknar"-fält. :)
Finns det något sätt få ut hela den sista raden som insertades?
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.
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() . ";
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?
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.
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.
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!