Oh Shit! mysql_result vs mysql_fetch_array

Oh Shit! mysql_result vs mysql_fetch_array

Imaginemos que temos uma tabela mysql de nome tabela_nomes:

id nome sobrenome
0 André Dias
1 Bernardo Estevão
2 Caetano Fagundes

Então digamos que você quer só pegar o Nome da linha onde o Id é igual a 1.

Você, muito espero, já pensou: É Bernardo! Mas e no PHP+Mysql, como seria?

Vamos iniciar fazendo a solicitação:

$conexao = mysql_query(“SELECT nome FROM tabela_nomes where id=’1′);

Isso deveria ser o suficiente para exibir o nome Bernardo, mas quando você solicita echo $conexao, ele vai imprimir algo como Resource id #2. Ou seja, ele puxa um tal de Resource, que é uma referência interna do mysql.

Então como solicitar o valor Bernardo de $conexao? O método mais comum que eu conheço exigia que fosse feito isso:

$array = mysql_fetch_array($conexao);

echo $array[‘nome’];

Então comecei a ficar encucado. Se eu já especifiquei em $conexao que eu quero selecionar o valor da coluna nome na linha que o id é igual a 1, porque depois eu tenho que criar um array e especificar NOVAMENTE que quero campo nome ? É redundante. Então no caso se eu usasse:

$conexao = mysql_query(“SELECT nome FROM tabela_nomes where id=’1′);

ou

$conexao = mysql_query(“SELECT * FROM tabela_nomes where id=’1′);

Daria na mesma, já que eu iria especificar o nome do campo que quero o valor aqui:

echo $array[‘nome’];

Além da redundância, há também a necessidade de criar um array. Para que criar um array se eu quero um único valor? Então pesquisei para ver se não tinha alguma função melhor que essa. Encontrei mysql_result.

Ela serve justamente para pegar o valor de uma única celula, especificando o número da linha da sua consulta e o nome do campo.

Então como alguns de nós sabemos o 0 (zero) é o primeiro número do índice ao invés de um. Para usarmos na nossa aplicação, ficaria assim:

$conexao = mysql_query(“SELECT nome FROM tabela_nomes where id=’1′);

$nome = mysql_result($conexao,0);

echo $nome;

Então o mysql_result pegou a consulta $conexao e pegou na linha 0 seu único valor Bernardo. Se tivesse feito uma consulta selecionando todos os campos (*), precisaríamos de um mysql_result especificado diferente:

$conexao = mysql_query(“SELECT * FROM tabela_nomes where id=’1′);

$nome = mysql_result($conexao,0,”nome”);

echo $nome;

Então na verdade a função mysql_result não economiza linhas em relação ao mysql_fetch_array, mas tem menos redundância de informação.

Para ver a segunda variável do mysql_result funcionando, posso dar o seguinte exemplo:

$conexao = mysql_query(“SELECT * FROM tabela_nomes);

$variavel = mysql_result($conexao,2,”sobrenome”);

echo $variavel;

$variavel deverá retornar Fagundes. Mas no Manual de PHP do próprio PHP, dizem que quando há um número muito grande de resultados, o ideal é usar o mysql_fetch_array mesmo.

A única coisa que posso concluir é que o mysql_result é apenas para esse caso específico de quando você quer pegar um único valor e não quer repetir uma informação que você já deu.

Deixe uma resposta

O seu endereço de e-mail não será publicado.