Det finns ett par problem med ditt tillvägagångssätt. Först och främst kan du inte använda ditt argument värde för att referera till den underliggande kolumnen. Bra är att du kan använda Förberedda uttalanden som en lösning för detta.
Det andra problemet är att MySQL-funktioner inte tillåter användning av Prepared Statements. För att komma runt den begränsningen måste du använda lagrade procedurer istället. Som ett exempel:
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