Jump to content


Photo

Mysql_fetch_object


  • Faça o login para participar
6 replies to this topic

#1 Alysson Oliveira

Alysson Oliveira

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Masculino

Posted 24/07/2008, 10:46

Pessoal,

tenho um código que busca informações em um banco de dados.

[codebox] $busTalhao=mysql_query("SELECT tal_nome FROM tab_talhao WHERE tal_fazenda='$_GET[tal_fazenda]'");
if (mysql_num_rows($busTalhao) == 0)
{
echo "Fazenda n&atilde;o possui talh&otilde;es cadastrados!</br>";
exit;
}
else
{
$listTalhao=mysql_fetch_array($busTalhao);
$busPlaneja=mysql_query("SELECT * FROM tab_pla_talhao WHERE pla_talhao='$listTalhao[0]'");
$listaPlaneja=mysql_fetch_array($busPlaneja);
print_r($listaPlaneja);
}[/codebox]

O problema é que o $listaPlaneja retorna os valores duplicados. Essa minha primeira dúvida, porque está duplicando?
O resultado fica assim:
Array ( [0] => 15 [id_planeja] => 15 [1] => 23 [pla_talhao] => 23 [2] => Ver�o 2008/2009 [pla_safra] => Ver�o 2008/2009 [3] => Soja [pla_cultura] => Soja ... )

E assim por diante, não vou postar tudo porque senão fica grande.
Bom se eu mudo o código, onde está $listaPlaneja=mysql_fetch_array($busPlaneja); e coloco mysql_fetch_object o resultado fica assim:
stdClass Object ( [id_planeja] => 15 [pla_talhao] => 23 [pla_safra] => Ver�o 2008/2009 [pla_cultura] => Soja [pla_semente] => M-SOY 6101 [pla_tratam1] => Protreat ... )

E assim por diante.
Para ver os resultados estou usando o print_r() porque com echo, ou print, não dá para ver.

A idéia é simplesmente fazer a busca e mostrar na tela, sem necessidade de manipular, somar ou coisa do tipo. Só quero mostrar ao usuário que os dados daquela busca são aqueles, porém de forma organizado, pegando cada resultado e colocando no seu devido lugar.


Duvida: Como mostrar os resultados no caso do fetch_object? e Porque no fetch_array está duplicando?


Grato,

Alysson

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 24/07/2008, 11:12

O problema é que o $listaPlaneja retorna os valores duplicados. Essa minha primeira dúvida, porque está duplicando?

Porque por padrão a função mysql_fetch_array() usa o valor MYSQL_BOTH no argumento result_type. As outras opções seriam MYSQL_NUM (apenas números) ou MYSQL_ASSOC (array associativo, com os nomes dos campos).

Bom se eu mudo o código, onde está $listaPlaneja=mysql_fetch_array($busPlaneja); e coloco mysql_fetch_object o resultado fica assim:

...

E assim por diante.
Para ver os resultados estou usando o print_r() porque com echo, ou print, não dá para ver.

Não dá pra ver porque é um objeto. Você precisa acessar suas propriedades pelo nome do campo. É como usar mysql_fetch_array() com MYSQL_ASSOC, mas usando a conotação de objeto:

/* mysql_fetch_array() */
$listaPlaneja=mysql_fetch_array($busPlaneja, MYSQL_ASSOC);
print $listPlaneja['id_planeja'];

/* mysql_fetch_object() */
$listaPlaneja=mysql_fetch_object($busPlaneja);
print $listPlaneja->id_planeja;
[]’s :DAté mais

#3 Alysson Oliveira

Alysson Oliveira

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Masculino

Posted 24/07/2008, 11:39

Porque por padrão a função mysql_fetch_array() usa o valor MYSQL_BOTH no argumento result_type. As outras opções seriam MYSQL_NUM (apenas números) ou MYSQL_ASSOC (array associativo, com os nomes dos campos).



Paulo Ricardo, grato pela sua ajuda. Consegui mostrar os valores do objeto, mas ainda não entendi porque o array criado fica com campos duplicados?
O certo seria MYSQL_ASSOC?
vlw!

Alysson :D

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 24/07/2008, 11:48

Paulo Ricardo, grato pela sua ajuda. Consegui mostrar os valores do objeto, mas ainda não entendi porque o array criado fica com campos duplicados? O certo seria MYSQL_ASSOC?

Seguinte: www.php.net/mysql_fetch_array

Veja que a função tem 2 argumentos:

array mysql_fetch_array  ( resource $result  [, int $result_type  ] )
Veja também a descrição do argumento result_type:

The type of array that is to be fetched. It's a constant and can take the following values: MYSQL_ASSOC, MYSQL_NUM, and the default value of MYSQL_BOTH.

Quando você não declara o segundo argumento, por padrão, o valor MYSQL_BOTH é usado. O array vem duplicado porque é objetivo deste valor para o argumento, é como dar um array_merge() no retorno da função mysql_fetch_array() com MYSQL_NUM e MYSQL_ASSOC. Sacou? Se tu quer apenas índices com os nomes dos campos, sim, o certo seria MYSQL_ASSOC. Mais certo seria se você usasse diretamente a função mysql_fetch_assoc(), que é a mesma coisa que a função mysql_fetch_array() com MYSQL_ASSOC. ;-)

Espero não ter complicado ainda mais... :P

[]’s :DAté mais

#5 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 25/07/2008, 12:36

Geralmente utilizo mysql_fetch_assoc, já me retorna array com indices associativos :rolleyes:

[]'s

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#6 Alaerte

Alaerte

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Masculino
  • Localidade:Itabuna-BA
  • Interesses:Programação: PHP / MySQL / SQL Server/ HTML / CSS / JavaScript / XML / VB /

    Sistemas: Windows Server / Linux

Posted 25/07/2008, 12:59

Prefiro o fetch_row, pois índices numéricos são mais rápidos.

Edição feita por: Alaerte, 25/07/2008, 12:59.

Refrigere minha alma, guia-me pelo caminho da justiça "Salmo 23 cap 3"
WebMaster/Designer - Desenvolvedor Web - TI
Alaerte Gabriel ou ガブリエル
Visitem >> http://www.webaplicacoes.com/

#7 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 25/07/2008, 20:41

Prefiro o fetch_row, pois índices numéricos são mais rápidos.

Mas a diferença de velocidade pro usuário final é tão inexpressiva que nem vira argumento. :P

Numa consulta complexa é invitável acessar os campos pelos nomes, seja por objeto ou vetor associativo. Senão a legibilidade do código vai pro espaço.

[]’s :DAté mais




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq