Ci sono un paio di problemi con il tuo approccio. Prima di tutto non puoi usare il tuo argomento valore per fare riferimento alla colonna sottostante. La cosa buona è che puoi usare Dichiarazioni preparate come soluzione per questo.
Il secondo problema è che le funzioni MySQL non consentono l'uso di Prepared Statements. Per aggirare questa limitazione è necessario utilizzare invece le stored procedure. Ad esempio:
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