Há alguns problemas com sua abordagem. Em primeiro lugar, você não pode usar seu argumento valor para referenciar a coluna subjacente. O bom é que você pode usar Declarações preparadas como solução para isso.
O segundo problema é que as funções do MySQL não permitem o uso de instruções preparadas. Para contornar essa limitação, você precisa usar Stored Procedures. Como um exemplo:
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