koga021 0 Denunciar post Postado Março 9, 2010 Ola galera, estou com uma duvida referente a funçoes e seus retornos, quero fazer uma funcao que retorne o resuyltado de um sql. Ex: function dados($id) { resultado='SELECT campo1,campo2,campo3 FROM tabela WHERE id='$id';'; return resultado; } O Problema e o seguinte, o select pode vir com uma lista de resultados, vamos dizer que ele retorne 3 linhas. Como faço para retornar essa lista de valores e todos os seus campos? abç Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 9, 2010 Cara, o 'resultado de um SELECT', é o oque as funções como o mysql_query(), te retornam. Eu te indicaria fazer algo assim: function selecionar( $where=null ){ $sql="SELECT campo1,campo2,campo3 FROM tabela ".$where; return mysql_query( $sql ) or die ( mysql_error() );//depois 'trate' esse erro melhor} e então em outras funções você utilizaria esse retorno: function listarById( $id )//apesar disso ser meio estranho.. depende de qual tabela estamos falando, para um retorno WHERE id, ter mais de uma linha{ $query = selecionar( " WHERE id = {$id} " ); $html=''; while( $dados = mysql_fetch_object( $query ) ) { $html .= '<li>'.$dados->campo1.'</li>'; } return $html;}ou sei lá, se dessa mesma tabela você precisar montar um combobox: function combobox(){ $query = selecionar();//passando sem parâmetro vai pegar todas as linhas $combo=''; while( $dados = mysql_fetch_object( $query ) ) { $combo .= '<option value="'.$dados->campo2.'">'.$dados->campo1.'</option>'; } return $combo; } uma function só tem sentido em ser criada, se puder ser reutilizada em diversas situações, sem deixar de ser 'específica'. Ela não pode nem deve ser um 'faz tudo'. Divida os teus procedimentos e problemas em fragmentos de problemas menores, e resolva um deles de cada vez. Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Março 9, 2010 voce passando id só vair retornar uma linha, issu resolve //função de passagem por referenciafunction dados($id,&c1,&c2,&c3){ $resultado=mysql_query("SELECT campo1,campo2,campo3 FROM tabela WHERE id='$id'"; $linha = mysql_fetch_array($resultado); $c1=$linha["campo1"]; $c2=$linha["campo2"]; $c3=$linha["campo3"];}//variáveis que vão receber os valores do campos$campo1="";$campo2="";$campo3="";//chama a funçãodados($id,$campo1,$campo2,$campo3);echo $campo1." ".$campo2." ".$campo3; Compartilhar este post Link para o post Compartilhar em outros sites
koga021 0 Denunciar post Postado Março 9, 2010 Pelo que eu entendi, eu retorno ela como uma variavel normal, return $variavel, e fora da funcao eu trato ela como se fosse um array? Compartilhar este post Link para o post Compartilhar em outros sites
koga021 0 Denunciar post Postado Março 9, 2010 Ola Vitor, essa eu entendi, porem vamos supor que o resultado retorne 3 linhas, eu teria que acessar os campos assim? campo1[0];campo1[1];campo1[2]; e etc? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 9, 2010 Pelo que eu entendi, eu retorno ela como uma variavel normal, return $variavel, e fora da funcao eu trato ela como se fosse um array? Não. Fora da função, você já terá uma string pronta e limpa. bastará fazer: echo listarById( 15 );que você vai ter o HTML referente às linhas que retornarem da consulta.Veja que você nunca vai chamar a função: selecionar() diretamente. Voce só vai chamar as outras, que utilizarem o retorno dela. Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Março 9, 2010 eu acho q é assim, tempão que num faço função com array, mas é mais ou menos assim //função de passagem por referenciafunction dados($id,&c1[],&c2[],&c3[]){ $i=0; $resultado=mysql_query("SELECT campo1,campo2,campo3 FROM tabela WHERE id='$id'"; while($linha = mysql_fetch_array($resultado)){ $c1[$i]=$linha["campo1"]; $c2[$i]=$linha["campo2"]; $c3[$i]=$linha["campo3"]; $i++; }}//variáveis que vão receber os valores do campos$campo1=array();$campo2=array();$campo3=array();//chama a funçãodados($id,$campo1,$campo2,$campo3);for($j=0;$j<count($campo1);$j++){ echo $campo1[$j]." ".$campo2[$j]." ".$campo3[$j];} Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 9, 2010 function sql2array($query){ $sql = mysql_query($query) or die(mysql_error()); $resp = array(); while(false !== ($row = mysql_fetch_assoc($sql))) $resp[] = $row; return $resp; } vai te retornar uma matriz bidimensional no formato [linha][coluna] para recuperar o dado, basta passar o número da linha (iniciando em 0) e o nome do campo da tabela sql $tabela = sql2array('SELECT * FROM `tbl_funcionarios`'); //nome do terceiro funcionário encontrado: echo $tabela[2]['nome']; edit pequena variação que inverte índice da linha com o campo function sql2array($query){ $sql = mysql_query($query) or die(mysql_error()); $campos = mysql_num_fields($sql); $resp = array(); $dados = array(); while(false !== ($row = mysql_fetch_row($sql))) $dados[] = $row; for($i = 0; $i < $campos; $i++) { $nome_campo = mysql_field_name($sql,$i); $resp[$nome_campo] = array(); foreach($dados as $linha) $resp[$nome_campo][] = $linha[$i][$nome_campo]; } return $resp; } assim é possível criar variáveis que contenham apenas o índice de determinado campo: extract(sql2array('SELECT `nome`,`idade` FROM `tbl_usuarios`')); //exibe o terceiro nome encontrado: echo $nome[2]; Compartilhar este post Link para o post Compartilhar em outros sites