DELIMITER // CREATE PROCEDURE checkUser(IN in_email VARCHAR(80), IN in_password VARCHAR(50)) BEGIN DECLARE tempId INT DEFAULT 0; DECLARE tempName VARCHAR(50) DEFAULT NULL; DECLARE done INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT id, name FROM users WHERE email = in_email AND password = in_password; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur; REPEAT FETCH cur INTO tempId, tempName; UPDATE users SET online = 1 WHERE id = tempId; UNTIL done = 1 END REPEAT; CLOSE cur; SELECT tempName; END // DELIMITER ;
NB: I have not tested this. MySQL may not like UPDATE against the table in which the cursor is currently open.
PS: You should review how you store passwords .
Comment on RETURN vs. OUT vs. result set:
RETURN used only in stored functions, not in stored procedures. Stored functions are used when you want to call a procedure in another SQL statement.
SELECT LCASE( checkUserFunc(?, ?) );
You can use the OUT parameter, but you must first declare a custom variable in order to pass it as that parameter. And then you have to select this custom variable to get its value anyway.
SET @outparam = null; CALL checkUser(?, ?, @outparam); SELECT @outparam;
When returning result sets from a stored procedure, the easiest way is to use a SELECT query.
Bill karwin
source share