Entendo a função mysql_fetch_array();
Para manipular os dados que estão no banco com auxilio do php, além do conhecimento sobre a linguagem necessitaremos seguir alguns passos, antes de executar nossos comandos. Como o SGBD (Sistema Gerenciador de Banco de Dados) utilizado será o MySql, utilizaremos funções especificas para este SGBD, caso esteja utilizando outro recomendo que consulte o manual e verifique quais as funções desenvolvidas para seu SGBD que possuem resultado semelhantes aquelas empregadas aqui.
Para manipulação de dados que estiverem no banco com php: primeiro nos conectamos com o nosso servidor MySql através da função mysql_connect(), passando como parâmetro o nome do host, usuário do banco e senha. Depois disso selecionamos o banco de dados que desejamos atingir passando seu nome como parâmetro para a função mysql_select_db(). Com a conexão aberta e o banco selecionado todas as queries executadas dentro da função mysql_query(), que estejam em nosso script se utilizarão desta conexão para chegar ao banco.
Quando queremos inserir, editar e excluir linhas; basta apenas que coloquemos o comando SQL como parâmetro de nossa função mysql_query() ele será executado e retornará o valor TRUE em caso de sucesso e FALSE em caso de erro, Pronto! Porém quando queremos recuperar dados do banco e mostrá-los em nosso site, necessitaremos utilizar o comando SELECT junto com a função mysql_query(). Nesse caso tal função não retornará apenas TRUE ou FALSE por isso precisaremos fazer um tratamento mais elaborado utilizando a função mysql_fetch_array() para mostrar nossos dados. Então, vamos entender como recuperar nossos dados com o auxílio da função mysql_fetch_array(), nossos exemplos terão como base a tabela abaixo:
Quando executamos a query “SELECT * FROM empregado WHERE setor=’administrativo’” em um banco que possua nossa tabela base teremos como resultado a mini-tabela abaixo:
Se depois de conectados com o banco, executarmos a query a partir de nosso servidor com o auxílio da função mysql_query(), teremos selecionado a mini-tabela acima e a copiado para a memória retornando apenas seu endereço. Por isso ao tentarmos escrever o retorno de tal função não veremos os dados selecionados, mas apenas o identificador da posição de memória que eles ocupam. Devido a isto necessitaremos de uma função auxiliar que vá até a memória e consiga trazer as linhas de nossa mini-tabela, esta função será a mysql_fetch_array().
Quando executarmos pela primeira vez a função mysql_fetch_array() passando como parâmetro o endereço de nossa mini-tabela, como a função ainda não tem nenhum endereço associado, ela irá fazer uma cópia para si do endereço da primeira linha de nossa mini-tabela em uma variável de endereço e então começará a transformar essa linha em um array, após a transformação ela incrementará a variável de endereço em uma unidade fazendo com que ela passe a armazenar o endereço da segunda linha, depois disso a função retorna a nossa linha na forma de um array, fazendo com os dados possam ser acessados colocando o nome de cada coluna como índice do array ou a posição que a coluna ocupa.
Na segunda execução como a função já tem sua variável de endereço preenchida ela não precisa mais copiá-la, apenas segue para transformar a linha associada ao endereço em um array, após a transformação incrementará a variável de endereço em uma unidade fazendo com que ela passe a armazenar o endereço da próxima linha, e retorna o array gerado com os dados da segunda linha. Tal processo se repetirá até que na recuperação da última linha de nossa mini-tabela o incremento da variável de endereço fará com que ela armazene um endereço que não corresponda a uma linha da nossa mini-tabela, e então quando a função for chamada novamente não conseguirá fazer a conversão da linha em um array e retornará FALSO.
Entendo o funcionamento da função poderemos exibir no nome dos empregados do setor financeiro da seguinte forma:
//conexão com o banco
$conecta = mysql_connect("localhost","root","");
$db = mysql_select_db("geracaobeta");//nome do banco geracaobeta
$sql = mysql_query("select * from empregado where setor='administrativo'");
//transforma a 1° linha em um array incrementa o endereço
$linha1 = mysql_fetch_array($sql);
echo $linha1['nome']."<br/>";//mostrará Maria dos Santos e quebrará a linha
//pega o endereço, transforma a 2° linha em um array e incrementa o endereço
$linha2 = mysql_fetch_array($sql);
echo $linha2['nome']."<br/>";//mostrará Maria Alice e quebrará a linha
//pega o endereço, transforma a 3° linha em um array e incrementa o endereço
$linha3 = mysql_fetch_array($sql);
echo $linha3['nome']."<br/>";//mostrará Mario Ferreira e quebrará a linha
Mas isto só funcionará porque sabemos que nossa consulta resultará em três linhas, mas caso não soubéssemos, como poderíamos fazer? Existe uma função que conta quantas linhas nosso resultado possui a mysql_num_rows(), de posse do número de linhas poderemos otimizar nosso código fazendo uso de um loop
//conexão com o banco
$conecta = mysql_connect("localhost","root","");
$db = mysql_select_db("geracaobeta");//nome do banco geracaobeta
$sql = mysql_query("select * from empregado where setor='administrativo'");
//contagem de linhas $num = 3;
$num = mysql_num_rows($sql);
//exibição das linhas
for($i=0; $i<$num; $i++){
$linha = mysql_fetch_array($sql);
echo $linha['nome']."<br/>";
}
Com este código teremos a execução da função mysql_fetch_array() três vezes, quando $i for 0,1 e 2; passando assim pelas três linhas de nossa tabela e retornado um array com o conteúdo da linha em questão. Já tivemos um ganho com relação a forma anterior, mas ainda podemos melhorar nosso algoritmo explorando o retorno da função mysql_fetch_array(), pois quando ela não conseguir recuperar a linha ela retornará FALSE. Então vamos ao código e depois a explicação:
//conexão com o banco
$conecta = mysql_connect("localhost","root","");
$db = mysql_select_db("geracaobeta");//nome do banco geracaobeta
$sql = mysql_query("select * from empregado where setor='administrativo'");
//exibição das linhas
while($linha = mysql_fetch_array($sql)){
echo $linha['nome']."<br/>";
}
A cada execução o array retornado será armazenado na variável $linha que por conter um valor diferente de 0 e de FALSE será avaliada como TRUE, o que fará com que o loop continue até que não hajam mais linhas a serem recuperadas e a função retorne FALSE, interrompendo o ciclo de repetições.
























