Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eucyelle

[Resolvido] mysql_fetch_array()

Recommended Posts

Alguém pode me ajudar em uma duvida???

 

Então to tentando criar um gráfico onde tenho que colocar uns valores do banco. A principio estou testando apenas os 4 primeiros valores.

 

O problema eh que quando eu coloco "$campo = mysql_fetch_array($linha, MYSQL_NUM)?" dentro do laço while ele não puxa os valores e quando eu coloco fora ele apenas puxa o primeiro valor...

 

<script type="text/javascript">
	var chart = new EJSC.Chart("myChart");
	chart.addSeries(new EJSC.LineSeries(new EJSC.ArrayDataHandler([

	<?php
		include('conecta.php');
		$iLeitor = 1;
		//Coordenar a seleção
		$iCont2 = 0;
		$iCont = 0;
		//$iValor = array();

		$sql="select * from dados where leitor='$iLeitor'";
		$linha=mysql_query($sql,$conexao);

		while($campo = mysql_fetch_array($linha, MYSQL_NUM) &&  $iCont < 5)
		{
			if($iCont == 4)
			{
			?>
				[<?php echo $iCont?>,<?php echo $campo[2]?>]

			<?php 
			}//fim if($iCont2 == 4)
			else
			{
			?>
				[<?php echo $iCont?>,<?php echo $campo[2]?>],

			<?php
			}// fim else
			$iCont ++;
		}//fim  while($campo = mysql_fetch_array($consultar) &&  $iCont < 5)

		mysql_free_result($linha);
	?>
])));

</script>

 

Obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve entender algumas coisas antes de eu explicar porque só retorna apenas um valor. Vejamos:

 

A variável $linha, possui o resultado da função mysql_query(). Quando é realizado uma consulta(SELECT), mysql_query retorna um resource. Um resource é uma variável especial que mantem uma referência de um recurso externo. No caso de uma query, é uma lista.

 

Uma lista, em programação, é uma estrutura de dados que te permite, avançar e retroceder entre as linhas (diferente de outras estruturas).

 

Para avançar e retroceder, você move um ponteiro interno na lista. Sempre que a lista é criada, o ponteiro encontra-se na posição zero (primeira posição da lista).

 

A função mysql_fetch_array(), mysql_fetch_assoc() e/ou mysql_fetch_object(), retorna o valor aonde o ponteiro se encontra e, após retornar o valor, move o ponteiro uma posição para a frente.

 

Vamos a prática, segue uma lista, o nome da coluna é 'nome'.

-> Gabriel Heming
  eucyelle
  Fulano da Silva

 

Considere a seta (->) o ponteiro da lista. Quando utilizamos a função mysql_fetch_array(), ele retorna a primeira linha:

$linha = mysql_fetch_array($resource);
echo $linha['nome'];

 

Saída:

Gabriel Heming

 

O ponteiro move-se uma posição para frente, e nossa lista fica da seguinte maneira:

  Gabriel Heming
-> eucyelle
  Fulano da Silva

 

Por isso que fora do while, você retorna apenas um resultado.

 

Já para o loop(while), ele sempre será realizando enquanto a condição for verdadeira.

while(true) {
/** codigo **/
}

 

Agora vamos ao exemplo prático com referência a essa lista:

-> Gabriel Heming
  eucyelle
  Fulano da Silva

 

Código:

while($linha = mysql_fetch_array($resource)) {
  echo $linha['nome'].'<br/>';
}

 

O que realmente acontece:

- Entra no loop(while);

- Retorna a primeira linha;

- Atribui o valor da linha na variável $linha;

- O loop considera a condição verdadeira, pois retorna um vetor com elementos;

- Move o ponteiro para a frente;

- Imprime o valor na coluna nome.

 

A saída será:

Gabriel Heming

E nossa lista estará:

  Gabriel Heming
-> eucyelle
  Fulano da Silva

 

Quando você chega no final do loop, ele vai verificar se a condição continua verdadeira.

Como há uma linha na posição 2, ele repetira o processo acima mencionado, e a saída será:

eucyelle

E a lista estará:

  Gabriel Heming
  eucyelle
-> Fulano da Silva

 

Quando não houver mais itens na lista, a função mysql_fetch_array(), retorna false. O loop irá reconhecer a condição como false e não irá mais executá-la.

 

Já o problema de não entrar no loop, deve ocorrer por dois motivos (um dos dois talvez).

 

Por haver duas condições no seu while, ou por não estar entre parênteses:

while(($campo = mysql_fetch_array($linha, MYSQL_NUM)) &&  $iCont < 5) {

Eu acho a primeira hipótese a mais plausível.

 

Eu sugiro testar somente desta maneira:

 

while($campo = mysql_fetch_array($linha, MYSQL_NUM)) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigadaaaaaaaaaaaaaaaaa!! Deu certo.....

 

Só coloquei os parenteses... nem acredito que era só isso. A sua explicação foi de grande ajuda.... Valewwww...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.