MySql快速用户选择

时间:2014-09-04 15:32:27

标签: mysql function select

我有一个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查询并返回所有用户详细信息列。 idkullaniciadiFotoGet(K.id,K.Foto,K.Gender)

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

1 个答案:

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