DavidBMedlem sedan jan. 20001 140 inlägg
Tjena
Försöker mig på att göra några Stored Procedures i MySql men får inte riktigt till det som jag vill ha det.
Funktionen är att jag vill lägga in data i databasen, sen hämta ut det ID på den rad som skapades och sedan lägga in ytteligare en rad där detta ID används utan att det skall returnera någonting
declare [b]insertId[/b] Int;
INSERT Into users (username,password,email)
values(UserName,Password,Email);
SELECT last_insert_id() INTO [b]insertId[/b] from users;
INSERT Into users_events (user_id,datetime,ip)
values([b]insertId[/b],DateTime,IP);
Vet inte ens om jag är rätt ute, jag får följande fel:
#42000Result consisted of more than one row
Nån som har en ide?
CompusaMedlem sedan jan. 20022 952 inlägg
JFGI ;)
When using INTO variables, it must return exactly one row, but apparently it does not. Either make the WHERE select a unique row,
or use LIMIT 1 to enforce a single result (which assumes that you want the first one).
DavidBMedlem sedan jan. 20001 140 inlägg
LarsGMedlem sedan dec. 200012 465 inlägg
Du behöver inte blanda in select into och någon tabell
SET insertId = last_insert_id();
DavidBMedlem sedan jan. 20001 140 inlägg
Tackar, gav lite mindre kod.
Har stött på ett annat problem, får inte IF-satsen att fungera.
declare UserId int;
declare Comment varchar(45);
select id from users where username = Usr AND password = Pwd;
set UserId = id;
if UserId > 0 then
Comment = 'sadsad';
else
Comment = 'saddsa';
end if;
DavidBMedlem sedan jan. 20001 140 inlägg
declare UserId int;
declare Comment varchar(45);
select id from users where username = Usr AND password = Pwd;
set UserId = id;
if UserId > 0 then
[b]SET[/b] Comment = 'sadsad';
else
[b]SET[/b] Comment = 'saddsa';
end if;
:OO
LarsGMedlem sedan dec. 200012 465 inlägg
if exists (select * from users where username = Usr AND password = Pwd) then
SET Comment = 'sadsad';
else
SET Comment = 'saddsa';
end if;
eller vad är problemet?
Peter SMedlem sedan dec. 20025 484 inlägg
Skulle gissa på att David i inlägg #5 glömde 'SET' i if-satsen.
:)
LarsGMedlem sedan dec. 200012 465 inlägg
Jo, men jag förstår inte hur
select id from users where username = Usr AND password = Pwd;
set UserId = id;
skulle fungera.
DavidBMedlem sedan jan. 20001 140 inlägg
LarsG:
Du har helt rätt. Det fungerade inte, fick inte tid att testa igår.
Problem återstår, det jag vill är att ID't på användaren skall sparas i UserId för att sedan användas
i en INSERT i en annan tabell.
Dessutom vill jag att UserId skall "returneras" till min applikation, hur gör jag detta?
Bifogar hela proceduren:
DELIMITER $$
DROP PROCEDURE IF EXISTS `db`.`ValidateUser` $$
CREATE PROCEDURE `ValidateUser`(IN UserName varchar(45),
IN Pass varchar(45),
IN IP varchar(14),
IN DateTime DateTime)
BEGIN
declare UserId int;
declare Comment varchar(45);
select id from users where username = UserName AND password = Pass limit 1;
SET UserId = id;
if UserId > 0 then
SET Comment = 'Success';
else
SET Comment = 'Failure';
end if;
insert into events (user_id,datetime,ip,comment)
values(UserId,DateTime,IP,Comment);
END $$
DELIMITER ;
LarsGMedlem sedan dec. 200012 465 inlägg
declare UserId int;
select id into userid from users where username = UserName AND password = Pass;
if userid is null then
-- ingen användare med detta namn finns, vidtag lämplig åtgärd
else
-- användare funnen
end if;