
Mysql_fetch_object
#1
Posted 24/07/2008, 10:46
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ão possui talhõ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
Posted 24/07/2008, 11:12
Porque por padrão a funçãoO problema é que o $listaPlaneja retorna os valores duplicados. Essa minha primeira dúvida, porque está duplicando?
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).Não dá pra ver porque é um objeto. Você precisa acessar suas propriedades pelo nome do campo. É como usarBom 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.
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

#3
Posted 24/07/2008, 11:39
Porque por padrão a função
mysql_fetch_array()
usa o valorMYSQL_BOTH
no argumentoresult_type
. As outras opções seriamMYSQL_NUM
(apenas números) ouMYSQL_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

#4
Posted 24/07/2008, 11:48
Seguinte: www.php.net/mysql_fetch_arrayPaulo 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
?
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
:Quando você não declara o segundo argumento, por padrão, o valorThe 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.
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...

[]s

#5
Posted 25/07/2008, 12:36
#6
Posted 25/07/2008, 12:59
Edição feita por: Alaerte, 25/07/2008, 12:59.
WebMaster/Designer - Desenvolvedor Web - TI
Alaerte Gabriel ou ガブリエル
Visitem >> http://www.webaplicacoes.com/
#7
Posted 25/07/2008, 20:41
Mas a diferença de velocidade pro usuário final é tão inexpressiva que nem vira argumento.Prefiro o fetch_row, pois índices numéricos são mais rápidos.

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

1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)