quarta-feira, 9 de outubro de 2013

Extraindo múltiplas linhas MySql PHP

Veja como é fácil extrair várias linhas do MySql com o PHP.


Pessoal, a gente já viu como fazer uma conexão com banco de dados MySql, e naquele exemplo fizemos uma pesquisa na base de dados trazendo apenas uma única informação. Pois bem, agora vamos ver como selecionar múltiplas linhas da base de dados.

Não vou detalhar a explicação da realização da conexão, se desejar mais explicações click aqui.

Vamos começar, então.

Os comandos são basicamente os mesmos do exemplo anterior a diferença está na forma da realização do fetch e do acesso ao array. Vejamos.

O fato é que qualquer função fetch da biblioteca para MySql funcionaria. O que muda seria a forma como você acessaria cada coluna.

Quando você executa o SQL com mysql_query você tem como retorno um array de linhas que foram retornadas do banco de dados. Porém, na grande maioria dos casos, quase 100% deles, você quer ter acesso às colunas individualmente. Por esse motivo precisamos quebrar cada linha recebida em colunas. Quem faz essa separação das colunas é o próprio comando fetch que você usar.

Os comandos fetch realizam uma leitura do array devolvido pelo comando mysql_query e separa as colunas em forma de array. Essa leitura pega a linha atual e logo em seguida se posiciona na linha seguinte para que essa, então, possa ser lida no próximo comando fetch.

Por exemplo se eu precisar realizar a leitura das três primeiras linhas eu terei que realizar três comando fetch, uma para cada linha, logo após a execução da query. Cada uma das leituras me devolveria um array contendo os dados contidos em cada uma das colunas.


mysql_fetch_row

Essa função devolve um array contendo os dados das colunas da linha atual. Como em PHP os arrays são um conjunto de chave/valor, para que eu possa ter acesso ao valor de cada coluna terei que usar uma chave. A chave de pesquisa para mysql_detch_row é um inteiro começando de 0, indo até ao número de colunas devolvidas menos um. Por exemplo, $colunas[0] para a primeira coluna, $minhascols[5] para a sexta coluna da minha query.

<?php
$resultado 
mysql_query("SELECT matr, email FROM func WHERE matr = '1456'");
if (!
$resultado) {
    echo 
'Não foi possível executar a consulta: ' mysql_error();
    exit;
}


$colunas mysql_fetch_row($resultado);

echo 
$colunas[0]; // 1456echo $colunas[1]; // o endereço de email?>


mysql_fetch_assoc

Essa função devolve um array contendo os dados das colunas da linha atual. Como em PHP os arrays são um conjunto de chave/valor, para que eu possa ter acesso ao valor de cada coluna terei que usar uma chave. A chave de pesquisa para mysql_detch_assoc é o nome da coluna presente na query.

Veja um exemplo.

<?php

$con 
mysql_connect("localhost""usariodb""senha123");

if (!
$con) {
    echo 
"Não foi possível conectar ao banco de dados: " mysql_error();
    exit;
}

if (!
mysql_select_db("nomedb")) {
    echo 
"Não foi possível selecionar nomedb: " mysql_error();
    exit;
}
$sql "SELECT matr as id, nome, salario
        FROM   func
        WHERE  ativo = 1"
;$resultado mysql_query($sql);

if (!
$resultado) {
    echo 
"Não foi possível executar a consulta ($sql) no banco de dados: " mysql_error();
    exit;
}

if (
mysql_num_rows($resultado) == 0) { // Quantidade de linhas retornadas
    echo 
"Não foram encontradas linhas, nada para mostrar, assim eu estou saindo";
    exit;
}
// Enquanto uma linha de dados existir, coloca esta linha em $colunas como uma matriz associativa
// Nota: se você esta esperando apenas uma linha, não é necessário usar um loop
while ($colunas mysql_fetch_assoc($result)) {
    echo 
$colunas["id"]; // Repare que n select determina que matr seja chamada por id.
    echo 
$colunas["nome"];
    echo 
$colunas["salario"];
}


?>


mysql_fetch_array

Essa função devolve um array contendo os dados das colunas da linha atual. Como em PHP os arrays são um conjunto de chave/valor, para que eu possa ter acesso ao valor de cada coluna terei que usar uma chave. A chave de pesquisa para mysql_detch_assoc tanto pode ser um valor numérico a partir de 0 até a quantidade de colunas menos 1, como pode ser o nome da coluna presente na query. Existe um parâmetro nessa função que informa como você deseja receber o array, se é por número, nome da coluna ou ambos.

Os exemplos a seguir foram tirados do site oficial do PHP.

Usando posicionamento para buscar o valor da coluna.

<?php
mysql_connect
("localhost""mysql_user""mysql_password") or
    die(
"Não foi possível conectar: " mysql_error());mysql_select_db("mydb");$result mysql_query("SELECT id, name FROM mytable");

// MYSQL_NUM na linha abaixo diz que a busca será por posicionamento.

while ($row mysql_fetch_array($resultMYSQL_NUM)) {
    
printf("ID: %s  Name: %s"$row[0], $row[1]);
}
mysql_free_result($result);?>


Usando nome da coluna para buscar o valor da mesma.

<?php
mysql_connect
("localhost""mysql_user""mysql_password") or
    die(
"Não foi possível conectar: " mysql_error());mysql_select_db("mydb");$result mysql_query("SELECT id, name FROM mytable");
// MYSQL_ASSOC na linha abaixo diz que a busca será por nome.

while ($row mysql_fetch_array($resultMYSQL_ASSOC)) {
    
printf("ID: %s  Name: %s"$row["id"], $row["name"]);
}
mysql_free_result($result);?>


Usando nome da coluna ou posicionamento para buscar o valor da da coluna.


<?php
mysql_connect
("localhost""mysql_user""mysql_password") or
    die(
"Não foi possível conectar: " mysql_error());mysql_select_db("mydb");$result mysql_query("SELECT id, name FROM mytable");
// MYSQL_BOTH na linha abaixo diz que a busca será por ambos.

while ($row mysql_fetch_array($resultMYSQL_BOTH)) {
    
printf ("ID: %s  Name: %s"$row[0], $row["name"]);
}
mysql_free_result($result);?>

Bem pessoal, é isso aí espero ter ajudado mais uma vez.

Um grande abraço.

Joselmo Carvalho





Nenhum comentário:

Postar um comentário