簡體   English   中英

MySQL快速用戶選擇

[英]MySql quick user select

我有一個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)');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM