Il y a quelques problèmes avec votre approche. Tout d'abord, vous ne pouvez pas utiliser votre argument valeur pour référencer la colonne sous-jacente. La bonne chose est que vous pouvez utiliser Déclarations préparées comme solution de contournement pour cela.
Le deuxième problème est que les fonctions MySQL ne permettent pas l'utilisation d'instructions préparées. Pour contourner cette limitation, vous devez utiliser des procédures stockées à la place. Par exemple :
CREATE PROCEDURE test_func (IN col1 varchar(100), OUT res int)
BEGIN
SET @s=CONCAT('SELECT ',col1,' INTO @res FROM yourtable WHERE id=1');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SELECT @res INTO res;
END