+6

Formas de manipular os dados de uma busca MySQL

criado por David Bittencourt em 05/12/2003 10:00am
MYSQL_FETCH_ASSOC()

A única diferença entre essa função e a anterior é que a matriz retornada tem chaves com os nomes das colunas, chamada de matriz associativa. Vejamos:

<?php
$result = mysql_query("SELECT * FROM tabela1 WHERE id=1");
?>

Se executarmos mysql_fetch_assoc() no lugar de mysql_fetch_row():

<?php
$arr = mysql_fetch_assoc($result);

// $arr terá os seguintes valores
$arr = array(
    "id" => 1,
    "nome" => "Fulano",
    "email" => "fulano@prov.com.br",
    "cidade" => "Campinas"
);

// se quisermos o nome da pessoa
echo $arr["nome"];

?>

Já podemos ver a vantagem de usar esta função. Numa tabela com um número maior de colunas, podemos facilmente obter os dados que queremos chamando o nome da coluna, o que é bem mais intuitivo.

Qual é um problema que pode ocorrer? Vejamos a seguinte busca:

<?php
$result = mysql_query("SELECT * FROM tabela1, tabela2 WHERE tabela1.id=tabela2.id AND id=1");
?>

Sabemos que a tabela2 tem uma coluna de mesmo nome que a tabela1 - 'email'. Neste caso, se executamos mysql_fetch_assoc() e escrevemos:

<?php
echo $arr["email"];
?>

A última coluna terá precedência, ou seja, teremos o seguinte resultado:

ful@prov.com.br

E não:

fulano@prov.com.br

E ainda, não teremos os dois e-mails no resultado, somente um.

Para corrigir esse problema, utilizamos um recurso do MySQL chamado 'alias' (apelidos). Daremos um apelido à coluna 'email' da tabela2.

Montamos a busca da seguinte maneira:

<?php
$result = mysql_query("SELECT tabela1.*, tabela2.email AS email2 FROM tabela1, tabela2 WHERE tabela1.id=tabela2.id AND id=1");
?>

A coluna 'email' da tabela2 agora se chama 'email2'. Se executarmos mysql_fetch_assoc() teremos os seguintes valores na variável $arr:

<?php
$arr = array(
    "id" => 1,
    "nome" => "Fulano",
    "email" => "fulano@prov.com.br",
    "cidade" => "Campinas",
    "email2" => "ful@prov.com.br"
);

// se quisermos os dois e-mails da pessoa na tela
echo $arr["email"] . " ou " . $arr["email2"];

?>

Próxima função: mysql_fetch_array()

Comentários:

Mostrando 1 - 10 de 18 comentários
foi de grande ajuda!!! Valeu!
11/07/2005 12:47pm (~19 anos atrás)

Estou desenvolvendo um sistema para faculdades, e para exibir os nomes dos alunos utilizei os informações do David Bittencourt, foi de grande ajuda!!!

Parabéns!
19/05/2005 12:58pm (~19 anos atrás)

E se caso fosse alterar via página,um nome do campo da tabela?
13/10/2004 4:42pm (~20 anos atrás)

Gustavo Villa disse:
David, parabéns pelo artigo.
Gostei da dica de atribuir os resultados da consulta a uma outra array para depois usar assim: $myarr[3]['nome'];

Gostei também do esclarecimento a respeito do uso de mysql_fetcha_array, como o segundo argumento para economizarmos espaço na memória.

Parabéns mesmo.
24/07/2004 9:45am (~20 anos atrás)

blz, funcionou legal sem as imagens..
10/03/2004 2:02pm (~21 anos atrás)

Perdão, as imagens não apareceram por causa de um bug no codigo do site que eu consertei semana passada.

O David enviou para mim as imagens novamente para eu consertar o artigo, mas só agora tive tempo para isso.

--Joao
14/12/2003 4:12pm (~21 anos atrás)

Obrigado Bucaneiro... =)

É, com as imagens seria bem melhor... =(

--db
10/12/2003 2:11pm (~21 anos atrás)

cara formidavel, com exemplos práticos, abordagem simples e de uso comum.

Poxa galera consertem as imagens, este é um artigo de grande valor pros iniciantes.
10/12/2003 12:06pm (~21 anos atrás)

Prefiro a função mysql_fetch_row(), pois é a mais rápida de todas.
Em relação ao artigo, muito bom MESMO, principalmente referente à dica do 'alias'.

Parabéns!
09/12/2003 2:12pm (~21 anos atrás)

No início eu também usava mysql_fetch_object() pois era como eu tinha aprendido.

Quando meus scripts começaram a ficar mais complicados eu vi a vantagem em usar mysql_fetch_array() como expliquei na última página do artigo.

Hoje, como minhas buscas no MySQL exigem diversas tabelas e grande número de campos, usar mysql_fetch_assoc() é a melhor opção pra mim.

Cada um precisa analisar a sua necessidade =)

--db
08/12/2003 7:57pm (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)