【发布时间】:2021-05-21 19:45:37
【问题描述】:
如果找不到数据,我很难找到从存储过程中引发异常的方法。
我需要一种方法来检查 if 语句中的查询结果。
如果计数为 0,则抛出异常。如果有数据则返回数据。
CREATE DEFINER=`adminHC`@`%` PROCEDURE `find_user_with_credentials`(
IN `usernameIN` VARCHAR(45)
, IN `encryptedpwIN` VARCHAR(45)
)
BEGIN
SELECT *
FROM (SELECT distinct
userid
,firstname
,lastname
,publicname
,email
,addressid
,create_date
,update_date
,active
FROM dev_users
WHERE (email = usernameIN OR (
publicname IS NOT null AND
publicname = usernameIN
))
AND encryptedpw = encryptedpwIN
AND active = 1) user;
IF count(user) > 0 THEN
SELECT user;
ELSE
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = "Invalid username or password",
MYSQL_ERRNO = 403;
END IF;
END
【问题讨论】:
-
什么是
@user? -
那是我不知道自己在做什么。我希望@user 引用名为 user 的查询的结果。
-
一个变量只能保存一个值,不能保存整个结果表。
-
加密密码的良好做法是将随机盐作为密码的一部分。这意味着您可以读取加密的密码,并使用它来加密输入的明文密码并查看它们是否匹配,但是您不能做您在这里似乎拥有的事情,加密明文密码然后查看它是否与密码中的内容匹配数据库。
-
我在服务器上使用了盐。用户输入的密码经过加密,并与数据库中保存的加密密码进行核对。
标签: mysql exception stored-procedures mysql-workbench