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:私はこれをテストしていません。 MySQLは、現在カーソルが開いているテーブルに対するUPDATEを好まない可能性があります。
PS:パスワードの保存方法 を再検討する必要があります 。
RETURN
についてコメントし直してください vs. OUT
対結果セット:
RETURN
ストアドプロシージャではなく、ストアド関数でのみ使用されます。保存された関数は、別のSQL式内でルーチンを呼び出したい場合に使用されます。
SELECT LCASE( checkUserFunc(?, ?) );
OUT
を使用できます パラメータですが、そのパラメータとして渡すには、最初にユーザー変数を宣言する必要があります。そして、とにかくその値を取得するには、そのユーザー変数を選択する必要があります。
SET @outparam = null;
CALL checkUser(?, ?, @outparam);
SELECT @outparam;
ストアドプロシージャから結果セットを返す場合は、SELECT
を使用するのが最も簡単です。 クエリ。