我有一个Users表,并且正在获取具有ID的用户详细信息(通常方式)。

这就是我获取用户详细信息的方式。

select id,kullaniciadi,FotoGet(K.Foto,K.Gender) from kullanicilar K where id=1;


FotoGet函数总是返回字符串值,例如“ Photos / sssss.jpg”

到目前为止,我还可以使用这种方法,但是我想知道如何使用单个函数来完成此操作?
喜欢

set @uid=1;
Select UserGet(@uid);


我将id放在括号内,该函数将运行我的选择查询并返回所有用户详细信息列。 idkullaniciadiFotoGet(K.id,K.Foto,K.Gender)

我可以使用这种方式获取详细信息吗?

最佳答案

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)');

关于mysql - MySQL快速用户选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25669464/

10-11 03:27
查看更多