Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Problema com PDO.

Senhores, boa noite, estou tendo dificuldade para popular os set da minha classe FuncaoDao com o array da minha consulta com PDO. Alguém poderia me explicar o que estou fazendo errado ?

Classe Função

<?php


class Funcao{

    private $id;
    private $nome;



    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }


Classe FuncãoDao. A function inserir está funcionando normalmente, equan

<?php

class FuncaoDao 
{

    public function inserir(Funcao $funcao)
    {
    $query  = "INSERT INTO funcoes(nome) VALUES (:nome)";
    $conexao = Conexao::pegarConexao();
    $stmt = $conexao->prepare($query);
    $stmt->bindValue(':nome',$funcao->getNome());
    $stmt->execute();

    }
    public static function listar()
    {
        $funcoes = array();
        $query = "SELECT id,nome FROM funcoes ORDER BY nome ASC";
        $conexao = Conexao::pegarConexao();
        $resultado = $conexao->query($query);
      while($linha = $resultado->fetchAll(PDO::FETCH_ASSOC))
        {
            $id = $linha['id'];
            $nome = $linha['nome'];

            $funcao = Funcao();

            $funcao->setId($id);
            $funcao->setNome($nome);

            array_push($funcoes,$funcao);
        }
        return $funcoes;
    }

Quando chamo a function listar nada é exibido e nenhuma mensagem de erro é exibida.

<?php
$funcoes = FuncaoDao::listar();
foreach($funcoes as funcao) :
    echo $funcao->getId()." - ".$funcao->getNome();
    echo"</br:>";
endforeach;
?>

`
3 respostas

Fala, Gerson.

Não sei se foi só erro de digitação aqui na hora de postar, mas no seu FuncaoDao::inserir você colocou '':nome ao invés de ':nome', e ao invés de <?php no código que executa a função listar você usou <php, o que foi interpretado como uma tag HTML.

Fora isso, sua tabela funcoes já tem registros? Porque você tá tentando buscar os dados com FuncaoDao::listar() mas em nenhum momento mostrou o código que insere.

Vinicius, boa noite, obrigado por dispor de tempo para me ajudar. As pontuações que você fez trata-se de um erro de digitação. O meu problema está relacionado a popular os set da classe após a realização da consulta feita a partir da função listar.

solução!

Seu problema está aqui, Gerson:

while($linha = $resultado->fetchAll(PDO::FETCH_ASSOC))

O fetchAll() retorna um array associativo. Não faz sentido esse while sem comparação. O correto seria:

$funcoes = $resultado->fetchAll(\PDO::FETCH_CLASS, Funcao::CLASS);
return $funcoes;

Assim já é retornado um array com instâncias da classe Funcao.

;-)


PS.: Você tinha marcado meu outro comentário como solucionador. Aí eu marquei esse aqui como solucionador só pra corrigir, mas caso ainda tenha dúvida, é só falar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software