Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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/>";

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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();
} 


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testando essa query diretamente no SGBD funciona corretamente?

Compartilhar este post


Link para o post
Compartilhar em outros 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 !

Compartilhar este post


Link para o post
Compartilhar em outros 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;

?>


Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.