我有一个Users表,我正在获取带有id的用户详细信息(通常的方式)。
这是我获取用户详细信息的方式;
select id,kullaniciadi,FotoGet(K.Foto,K.Gender) from kullanicilar K where id=1;
FotoGet
函数总是返回字符串值,如'Photos / ssss.jpg'
到目前为止,我没有使用这种方式的麻烦,但我想知道如何使用单一功能执行此操作? 像
set @uid=1;
Select UserGet(@uid);
我将id
放在括号内,该函数将运行我的select查询并返回所有用户详细信息列。 id
,kullaniciadi
,FotoGet(K.id,K.Foto,K.Gender)
我可以用这种方式获取详细信息吗?
答案 0 :(得分:1)
MySQL存储的函数不能返回多个列,它只能返回单个标量值。
但是你可以设计一个返回结果集的存储过程:
CREATE PROCEDURE UserGet(uid INT)
SELECT id, kullaniciadi, FotoGet(K.Foto,K.Gender) FROM kullanicilar K WHERE id=uid;
然后这样称呼它:
CALL UserGet(1234);
它返回一个结果集,就像SELECT
查询一样。
DELIMITER //
CREATE PROCEDURE UserGet(IN uid INT, IN column_name VARCHAR(64))
BEGIN
SET @sql = CONCAT('SELECT id, ', column_name, ' FROM kullanicilar K WHERE id=?');
PREPARE stmt FROM @sql;
SET @uid = uid;
EXECUTE stmt USING @uid;
END//
DELIMITER ;
这样称呼:
CALL UserGet(1234, 'kullaniciadi');
请记住,编写代码以传递有效的列名作为过程参数是您的责任。如果您允许传递不值得信任的内容,则可能是SQL注入漏洞。
重新发表评论:
这应该可以正常工作:
CALL UserGet(1234, 'FotoGet(Foto,Gender)');