27 de nov. de 2012

Curso PDO [Aula 03: Conexão com PDO]

Curso de PDO
Nesta aula iremos aprender a fazer a seleção , ou listagem de dados com PDO.
Lembrando que iremos fazer as comparações e observações devidas com o modo primitivo do PHP.

Autor: CarlosCX Albert
Site: http://escolacompleta.com
Aula: 03-06

SELEÇÃO COMUM COM PDO
< ?php
include_once("conexao.php");
function listar_alunos(){
try{
$listar = $conexao->query("SELECT * FROM alunos");
$listar->execute();

if($listar->rowCount() > 0){
return $listar->fetchAll(PDO::FETCH_ASSOC);
}else{
echo "Não existem alunos cadastrados na base.";
}
}catch(PDOException $error){
echo "Error ao listar alunos: ".$error->getMessage();
}
}
$alunos = listar_alunos();

foreach($alunos as $aluno):
echo $aluno['nome_aluno']."<br />";
endforeach;
?>

Você poderia também, utilizar o FETCH_OBJ ao invés de FETCH_ASSOC , contudo nosso foreach ficaria desta forma:
foreach($alunos as $aluno):
echo $aluno->nome_aluno."<br />";
endforeach;

Exemplo:
< ?php
include_once("conexao.php");//inclusao do arquivo de conexao da aula passada
function listar_alunos(){
try{
$listar = $conexao->query("SELECT * FROM alunos");
$listar->execute();

if($listar->rowCount() > 0){
return $listar->fetchAll(PDO::FETCH_OBJ);
}else{
echo "Não existem alunos cadastrados na base.";
}
}catch(PDOException $error){
echo "Error ao listar alunos: ".$error->getMessage();
}
}
$alunos = listar_alunos();

foreach($alunos as $aluno):
echo $aluno->nome_aluno."<br />";
endforeach;

?>


<h3>SELEÇÃO COMPOSTA COM PDO</h3>

A seleção composta já é diferente , pois iremos utilizar <strong>condições</strong> , e devemos utilizar o <strong>prepare</strong> do PDO.
O método <strong>query</strong> é utilizado apenas para seleções comuns que não envolvem condições(WHERE).

Exemplo de seleção composta:

[php]
< ?php
include_once("conexao.php");//inclusao do arquivo de conexao da aula passada
function listar_alunos_com_condicao(){
try{
$idade = 15;/*aqui defini a idade desejada para condicao*/
$listar = $conexao->prepare("SELECT * FROM alunos WHERE idade = :idade");
$listar->bindValue(":idade",$idade);/*O bindValue protege os dados que você está passando , seta o valor para o parametro.*/
$listar->execute();

if($listar->rowCount() > 0){
return $listar->fetch(PDO::FETCH_ASSOC);
}else{
echo "Não existem alunos cadastrados na base.";
}
}catch(PDOException $error){
echo "Error ao listar alunos: ".$error->getMessage();
}
}
$alunos = listar_alunos_com_condicao();

foreach($alunos as $aluno):
echo $aluno['nome_aluno']."<br />";
endforeach;

?>

Observem que no exemplo acima, eu não utilizei o fetchAll , mas sim apenas o fetch, pois estou querendo retornar apenas um valor específico informado em minha “condição”.

Lembrando também que ao invés de utilizar bindValue , podemos utilizar também bindParam , que irá retornar o mesmo valor , contudo você poderá também especificar o tipo do parâmetro ( type ) passado e o tamanho ( lenght ) .

Exemplo:
$listar->bindParam(":idade",$idade,PDO::PARAM_INT,3);
Desta forma estou especificando que o valor passado é do tipo inteiro(PARAM_INT), e o tamanho é 3. Ou seja , não existe pessoa com idade maior que 3 digitos.

E para tipos strings ? Como seria ?
$listar->bindParam(":aluno_nome",$aluno_nome,PDO::PARAM_STR, 255);

Já no exemplo acima , estou informando que o parâmetro aluno_nome é do tipo string(PARAM_STR) e o tamanho máximo é de 255 caracteres.

Caso queiram saber mais sobre bindParam’s clique aqui

Agora, irei mostrar uma situação que muitos alunos tem dúvida. O famoso ponto de interrogação.

Quando passamos parâmetros , podemos também utilizar o ponto de interrogação , e logo após a posição do indice que pretendemos atribuir o valor corrente.

Exemplo:
< ?php include_once("conexao.php"); function listar_alunos_com_condicao(){ try{ $idade = 15; $listar = $conexao->prepare("SELECT * FROM alunos WHERE idade = ?");
$listar->bindValue(1,$idade);
$listar->execute();

if($listar->rowCount() > 0){
return $listar->fetch(PDO::FETCH_ASSOC);
}else{
echo "Não existem alunos cadastrados na base.";
}
}catch(PDOException $error){
echo "Error ao listar alunos: ".$error->getMessage();
}
}
$alunos = listar_alunos_com_condicao();

foreach($alunos as $aluno):
echo $aluno['nome_aluno']."
";

endforeach;
?>


Vejam que as linhas modificadas foram , as listadas abaixo:
$listar = $conexao->prepare("SELECT * FROM alunos WHERE idade = ?");
$listar->bindValue(1,$idade);/*O bindvalue protege os


Contudo, fica a pergunta. E se eu quisesse passar dois parâmetros na condição ? como ficaria ?

Veja o exemplo abaixo:
< ?php include_once("conexao.php"); function listar_alunos_com_condicao(){ try{ $idade = 15; $sobrenome = "Alberto"; $listar = $conexao->prepare("SELECT * FROM alunos WHERE idade = ? AND sobrenome = ?");
$listar->bindValue(1,$idade);
$listar->bindValue(2,$sobrenome);
$listar->execute();

if($listar->rowCount() > 0){
return $listar->fetch(PDO::FETCH_ASSOC);
}else{
echo "Não existem alunos cadastrados na base.";
}
}catch(PDOException $error){
echo "Error ao listar alunos: ".$error->getMessage();
}
}
$alunos = listar_alunos_com_condicao();

foreach($alunos as $aluno):
echo $aluno['nome_aluno']."
";
endforeach;
?>

Concluindo nosso exemplo , vejam as linhas alteradas
$sobrenome = "Alberto";
$listar = $conexao->prepare("SELECT * FROM alunos WHERE idade = ? AND sobrenome = ?");
$listar->bindValue(1,$idade);/*O bindvalue protege os dados que você está passando.*/
$listar->bindValue(2,$sobrenome);


É isso pessoal até a Próxima!

Nenhum comentário:

Postar um comentário