我正在尝试在MySQL中编写一个函数,该函数获取作为参数给定的用户名的密码,同时避免SQL注入。
这是我的代码:
CREATE FUNCTION get_password_for_user (p_username varchar(30))
returns varchar(32)
BEGIN
declare passwd varchar(32) default "";
PREPARE stmt FROM 'select password into @passwd from users where name=?';
SET @name = p_username;
EXECUTE stmt USING @name;
DEALLOCATE PREPARE stmt;
return passwd;
END $$
当我尝试创建它时,它会显示动态SQL错误:
错误代码:1336。存储的函数或
触发
我已经在网络上找到了涉及CONCAT的解决方案,但这意味着容易受到SQL注入的攻击,我显然不希望这样做。
有什么我可以做的吗?还是有其他适当的方法来处理这种情况?
最佳答案
为什么使用动态SQL?
CREATE FUNCTION get_password_for_user (p_username varchar(30))
returns varchar(32)
BEGIN
declare passwd varchar(32) default '';
select passwd := u.password
from users u
where u.name = p_username;
return passwd;
END $$
关于mysql - 如何使用存储的函数安全地检索sql数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36815802/