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).
10 svar · 1 483 visningar · startad av DavidB
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?
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).
Fungerade utmärkt, tack!
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;
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;
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?
Jo, men jag förstår inte hur
select id from users where username = Usr AND password = Pwd;
set UserId = id;
skulle fungera.
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 ;
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;