Q:

Usando function dentro de Select

Tenho um select, dentro dele tenho uma função :
SELECT VAL1, VAL2, ".funcao('VAL1', 'VAL2')." AS soma FROM Conta WHERE soma < 100

Estrutura da tabela CONTA
--------------------
| ID | VAL1 | VAL2 |
--------------------
| 1  |  10  |  50  |
--------------------
| 2  |  50  |  80  |
--------------------
| 3  |  30  |  70  |
--------------------

Se eu usar a seguinte estrutura na função :
function funcao($valor1, $valor2)
    { 
        $retorno = $valor1 + $valor2;
        return $retorno; 
    };

Consigo retornar o valor de cada coluna numa boa, e ainda obtenho o resultado!
Dai tentei trabalhar mais a função e aplicar o valor dentro de uma string. Ex:
function funcao($valor1, $valor2)
    { 
        $res = "Os números a ser somados são ".$valor1." e ".$valor2."";
        echo $res ;

        //Esse echo serve apenas de exemplo, pra mostrar o retorno da variável 
    };

Só que isso eu não conseguir fazer! Quando apliquei a variável $valor1 ou $valor2, em vez de mostrar o valor referente a coluna, ele mostrou o próprio nome da coluna, ou seja, VAL1 e VAL2

Minha dúvida é

É possível trabalhar com essas variáveis em uma função mais complexa de acordo com o exemplo citado, sem que se perca o valor da coluna? Já que quando eu tento fazer isso o valor fica como "VAL1" em vez de 10 ou 50.

Em modo mais simples! Mesmo que eu queira simplesmente fazer um "echo $valor1" dentro da função, o resultado é "VAL1" em vez de "10"

A:

Veja a aplicação do seu código:
query( "SELECT VAL1, VAL2, ".funcao('VAL1', 'VAL2')." AS soma FROM Conta WHERE soma < 100" );

Neste caso, o PHP vai juntar estas três coisas, pois você usou o operador de concatenação (.):

"SELECT VAL1, VAL2, "
funcao('VAL1', 'VAL2')
" AS soma FROM Conta WHERE soma < 100"

A primeira e a última são strings. A do meio, é uma chamada de função. Então, o PHP vai obter seu valor antes de concatenar, chamando sua função com duas strings, que são 'VAL1' e 'VAL2', resultando em zero, que é a soma das duas strings que você passou no seu exemplo, que não tem relação nenhuma com os valores do SELECT (que sequer aconteceu ainda).
Então o resultado será esse:
query( "SELECT VAL1, VAL2, 0 AS soma FROM Conta WHERE soma < 100" );

Só depois de concatenada a string no PHP, ela será enviada para o MySQL.
No segundo exemplo a coisa fica mais evidente:
function funcao($valor1, $valor2)
{ 
    $res = "Os números a ser somados são ".$valor1." e ".$valor2."";
    echo $res ;
};

Cpomo não tem return na função, só echo, fica mais fácil de perceber que 'VAR1' e 'VAR2' são somente strings para o PHP, portanto saem na tela como foram enviadas. E mesmo que pusesse um return, a string final não seria um SQL válido.
Solução
Se você quer usar funções no lado do DB, precisa que as funções sejam as do SQL, e não do PHP. Exemplo:
query( "SELECT VAL1, VAL2, VAL1+VAL2 AS soma FROM Conta WHERE soma < 100" );

Outro exemplo, com strings do lado do SQL:
query( "SELECT VAL1, VAL2, CONCAT( "Resultado:", VAL1+VAL2, "rea ) AS soma FROM Conta" );

Outra possibilidade seria pegar todo o resultado em um array, e depois fazer um loop no PHP chamando sua função (desta vez em PHP). Isto poderia ser feito na hora de mostrar os valores na tela.
Exemplo:
while ($row = $result->fetch_row()) {
    echo $row['VAL1'].' somado com '.$row['VAL2'].' resulta em '.($row['VAL1']+$row['VAL2']);
}

