1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[problema] mysql_fetch_array

Discussão em 'Web Development' iniciada por ruips, 31 de Agosto de 2008. (Respostas: 9; Visualizações: 1256)

  1. eu tenho uma função, que irá fazer o mysql_fetch_array, ou seja:

    PHP:
    function mfa($sql){
        
    mysql_select_db("***",mysql_connect("localhost","root",""));
        
    $query1=mysql_query($sql);
        
    $fetch=mysql_fetch_array($query1);
        return 
    $fetch;
    }
    e ao invocar a função para um while, simplesmente, apresenta-me um numero infinitos de resultados, até excederem os 30 segundos de execução...

    mas se puser assim já dá:
    PHP:
    $query1=mysql_query("SELECT * FROM `***`");
    while(
    mysql_fetch_array($query1)){
    ***
    }
    directamente no codigo, sem usar a expressão...

    apesar de novo, já programo com grande facilidade php, mas este erro tem sido algo que me tem posto os cabelos em pé!

    alguém me pode ajudar???

    abraço

    ruips
     
  2. p3dro

    p3dro Power Member

    Não sei se percebi exactamente a tua questão. Tu chamas a função mfa dentro de um ciclo, mas a instrução SQL que forneces é sempre a mesma? Tipo isto?
    PHP:
    while($row=mfa("select * from dados")){
      
    print_r($row);
    }
    Se for este o caso vai entrar num ciclo infinito, porque estás sempre a ir buscar o 1º mesmo registo, não avanças o "ponteiro" nos registos que a query te retorna. Daí dar o tal timeout.

    Se o que pretendes é receber logo todos os resultados da query, tenta alterar a tua função para algo deste género:
    PHP:
    function mfa($sql){
      
    mysql_select_db("***",mysql_connect("localhost","root",""));

      
    $rows=array();
      
    $query1=mysql_query($sql);
      while(
    $fetch=mysql_fetch_array($query1)){
        
    array_push($rows,$fetch);
      }
      
    mysql_close();
      return 
    $rows;
    }
    Isto faz com que a função devolva 1 array com todos os registos que a query encontrar.


    Poderás depois chamar a função de várias maneiras:

    PHP:
    $rows=mfa("select * from table");
    $count=count($rows);
    for(
    $i=0;$i<$count;$i++){
      
    $row=$rows[$i];
      echo 
    $row["field"];
    }
    ou

    PHP:
    $rows=mfa("select * from table");
    foreach(
    $rows as $key=>$row){
      echo 
    $row["field"];
    }

    And so on, an so on....


    Espero ter esclarecido a tua dúvida.
     
    Última edição: 1 de Setembro de 2008
  3. sim, percebeste bem, eu consigo por isso a dar bem, mas sem recorrer à função... eu também uso a função para obter dados, mas em casos que existe um e um só valor, logo não uso while e não dá erro...

    e se puser
    PHP:
    $rows=array();
    while(
    $fetch=mfa("SELECT * FROM `***`")){
    array_push($rows$fetch);
    }


    ????

    abraço
     
  4. p3dro

    p3dro Power Member


    Ao fazeres isso estás sempre a ir buscar o 1º registo que essa query te retorna. Isso não faz com o que o "apontador" ande de registo a registo até ao fim de todos os registos da query, dai entrares num ciclo infinito, pois essa condição vai ser sempre satisfeita, só no caso da query não retornar dados é que o ciclo é executado uma única vez.

    Mesmo que, se por ex. a query retornar nem que seja um só unico registo isso vai estar sempre a buscar o mesmo registo, porque estás sempre a fornecer a mesma instrução, é como estivesses a pedir infinitas vezes à BD um valor, ela vai te responder essas infinitas vezes a mesma coisa... penso eu de que :p

    Percebeste os exemplos que te dei?

    Mas espera por mais opiniões de pessoal mais entendido sobre esse assunto.
     
  5. ok, pronto, pode-se encerrar...
     
  6. p3dro

    p3dro Power Member

    Esse "ok, pronto" não foi lá muito convincente :002: se ainda continuas com dúvidas diz, que tenta-se explicar de outra maneira.
     
  7. hiddenbyte

    hiddenbyte Power Member

    altera tua funcao mfa , porque mysql_fetch_array nao pode ser usado assim.

    PHP:
    function mfa($sql) {
        
    mysql_select_db("***",mysql_connect("localhost","root",""));
        
    $query1=mysql_query($sql);
        return  
    $query1;
    }
     
    $sql =  mfa($sql);
     
    while (
    $sql_array  mysql_fetch_array($sql)) {
        echo 
    "$sql_array['id']"//exemplo
    }
     

     
  8. p3dro, esse "ok", é porque percebo que tenho mal e tenho de alterar muita coisa...

    hiddenbyte, tenho sempre usado do modo que expliquei acima (sem função) e dá sempre, mas vou experimentar...
     
  9. obrigado!

    dessa maneira dá, ou pelo menos da maneira que tenho, ou seja

    PHP:
    function query($sql){
        
    mysql_select_db("***",mysql_connect("localhost","root",""));
        
    $query1=mysql_query($sql);
        return 
    $fetch;
    }

    while(
    $a=mysql_fetch_array(query("SELECT * FROM ****"))){
    ***
    }
    [
    PHP]


    agora sim pode-se encerrar :D
     
    Última edição: 3 de Setembro de 2008
  10. p3dro

    p3dro Power Member

    :x2:

    Só estou aqui para tentar ajudar, agora se a ajuda é válida ou não, isso é outra coisa :p
     

Partilhar esta Página