Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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ç
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;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?
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?
>
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.
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];}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];
Cara, o 'resultado de um SELECT', é o oque as funções como o mysql_query(), te retornam.
Eu te indicaria fazer algo assim:
e então em outras funções você utilizaria esse retorno:Divida os teus procedimentos e problemas em fragmentos de problemas menores, e resolva um deles de cada vez.