Jump to content
Sign in to follow this  
dr.x

Consulta PDO não retorna valores

Recommended Posts

Olá pessoal !

O que está errado ?

Estou trazendo da base de dados.

$consulta = $pdo->prepare("SELECT id, nome, senha FROM usuarios where usuario = :usuario;");
$consulta->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
$consulta->bindParam(':nome', $_GET['nome'], PDO::PARAM_STR);
$consulta->bindParam(':usuario', $_GET['usuario'], PDO::PARAM_STR);
$consulta->execute();
$linha = $consulta->fetch(PDO::FETCH_ASSOC);

Não está retornando os valores solicitados.

echo "Id:" .$linha["id"]. "<br/>";  
echo "Usuário:" .$linha["usuario"]. "<br/>";
echo "Nome:" .$linha["nome"]. "<br/>";
Edited by Gabriel Heming
adicionar bbcode

Share this post


Link to post
Share on other sites

Primeiramente, se é uma consullta, o único dado necessário é usuário.

$consulta = $pdo->prepare("SELECT id, nome, senha FROM usuarios where usuario = :usuario;");
$consulta->bindParam(':usuario', $_GET['usuario'], PDO::PARAM_STR);
$consulta->execute();
$linha = $consulta->fetch(PDO::FETCH_ASSOC);

Tem certeza que não está ocorrendo nenhum erro? Pois deveria lançar algum erro sobre parâmetro não encontrado.

Na hora de criar sua conexão, adicione a opção para tratar erros como exceções:

try {
    $pdo = new PDO(/** dados de conexão **/);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    echo 'ERROR: ' . $e->getMessage();
}    

E na hora de realizar a consulta:

try {
    $consulta = $pdo->prepare("SELECT id, nome, senha FROM usuarios where usuario = :usuario;");
    $consulta->bindParam(':usuario', $_GET['usuario'], PDO::PARAM_STR);
    $consulta->execute();

    $linha = $consulta->fetch(PDO::FETCH_ASSOC);

    /** importante fechar o cursor do statement uma vez que o dados foram retornados **/
    $consulta->closeCursor();

    echo "Id:" .$linha["id"]. "<br/>";  
    echo "Usuário:" .$linha["usuario"]. "<br/>";
    echo "Nome:" .$linha["nome"]. "<br/>";
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
} 

Também é importante fechar o cursos, vide o manual.

Share this post


Link to post
Share on other sites

Obrigado Gabriel.

 

Estou usando assim, mas a único retorno do echo são os títulos. Na minha base tenho 2 usuários apenas. Só para teste.

<?php

(...) aquí eu verifico a sessão...

//Conecta o banco de dados e já faz o tratamento mencionado.
include("conexao.php");
$pdo=conectar(); 


try {


    $consulta = $pdo->prepare("SELECT id, nome, senha FROM usuarios where usuario = :usuario;");
    $consulta->bindParam(':usuario', $_GET['usuario'], PDO::PARAM_STR);
    $consulta->execute();


    $linha = $consulta->fetch(PDO::FETCH_ASSOC);


    /** importante fechar o cursor do statement uma vez que o dados foram retornados **/
    $consulta->closeCursor();


    echo "Id:" .$linha["id"]. "<br/>";  
    echo "Usuário:" .$linha["usuario"]. "<br/>";
    echo "Nome:" .$linha["nome"]. "<br/>";


} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
} 


?>
Edited by Gabriel Heming
adicionar bbcode

Share this post


Link to post
Share on other sites

Testando essa query diretamente no SGBD funciona corretamente?

Share this post


Link to post
Share on other sites

Tranquilo Gabriel. Funcionou.

 

A sessao do usuário por algum motivo desconhecido não estava sendo reconhecida. Matei o navegador e reiniciei os serviços e funcionou. Coisa de aprendiz.

 

Valeu !

Share this post


Link to post
Share on other sites

1. Verificou se tem algum registro no banco?
2. Caso tenha, o erro pode ser na sua conexão, já verificou?
3. utilize o seguinte formato:

<?php

$id = $_GET['id']; 

$sql = "SELECT id, nome, senha FROM USUARIO where id = :id";

        $stmt = $pdo->prepare($sql);

        $stmt->execute(array('id' => (int) $id));

 return $stmt;

?>


Edited by ivanferrer

Share this post


Link to post
Share on other sites

Dentro do bindParam você não pode colocar diretamente o method e necessário colocar em uma variável.

 

Primeiramente você está usando o $_GET o method do seu form e GET se for não tem erro, caso contrario a recuperação e via $_POST e não $_GET.

 

você está usando o

$consulta = $pdo->prepare("SELECT id, nome, senha FROM usuarios where usuario = :usuario;");
$consulta->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
$consulta->bindParam(':nome', $_GET['nome'], PDO::PARAM_STR);
$consulta->bindParam(':usuario', $_GET['usuario'], PDO::PARAM_STR);
$consulta->execute();
$linha = $consulta->fetch(PDO::FETCH_ASSOC);



$pdo a mesmo está recebendo a instancia do PDO?

usando uma função ou uma class com o padrão singleton?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.