Boa tarde Pessoal;
Estou com uma dúvida sobre o retorno de uma consulta PDO no mysql.
Se eu consultar todos os registros de uma determinada tabela, Sendo que essa tabela representa um Objeto no PHP.
Como faço pra fazer cada linha do resultado dessa consulta virar esse objeto?
Sempre bom pesquisar no forum antes, há sempre alguma duvida parecida…
Tá tudo bem, eu vi esse tópico. mas não entendi.
Seguindo esse exemplo, como seria o retorno desse select.
Outra dúvida é se as colunas do BD tem que estar com os mesmos nomes nos atributos da classe Aluno.
O método query do pdo retorna um PDOStatement (só ler na documentação que alias existe em pt-br), a partir dai o método fetchAll retorna todas as linhas do seu sql, quando vc diz a ele PDO::FETCH_CLASS e passa o nome da classe (nesse caso Aluno) vc está obrigando retornar tudo objetos dessa classe…
Exato, sem isso ele se perde…
Agora se vc não quiser travar em uma classe especifica, mas quer que retornem objetos mesmo assim (baseado nos nomes das colunas), basta usar:
$stm = $pdo->query('SELECT nome, idade FROM pessoa');
$pessoas = $stm->fetchAll(PDO::FETCH_OBJ);
Usando var_dump vc verá que veio uma lista (array) de objetos do tipo stdclass (generico, muito parecido com structs da linguagem C)…
var_dump($pessoas);
Sucesso!
Bah agora sim entendi.
Cara como você sabe tanto? kkkk
Obrigado.
Eu estava fazendo a consulta.
Pegando o resultado do stm com fecthAll
Fazia um foreach, criava o objeto e passava via Set os valores para os atributos e adicionava em um array, dava muito trabalho.
Então vou tentar mudar para esse PDO::FETCH_CLASS.
Ah cara, to na estrada um tempinho já (quase 12 anos e desde 2009 com php), e quebrei (e ainda quebro) muito a cara como qualquer um, o aprendizado vem mais disso do que a teoria em si, obvio que a teoria ajuda mas o dia a dia conta muito também, além disso o convivio diario com a linguagem não te faz esquecer
Entre 2013-2014 eu fiz uma formação da 4linux a um preço bacana se fechasse o pacote à vista com os 3 primeiros cursos (segurança era EAD na época e não estava no pacote, mas a formação principal cobria bem esse assunto), já conhecia um pouco de php mas a formação da uma base profissional excelente…
Sucesso nos estudos, boa sorte!
Outro macetinho da hora, digamos que vc pediu retorno tudo em array (matriz no caso)
$pessoas = $stm->fetchAll(PDO::FECTH_ASSOC);
$pessoasOBJ = array();
foreach ($pessoas as $p) {
$pessoasOBJ[] = (object) $p; #cast de tipo...
}
var_dump($pessoasOBJ);
Veja o que retorna e assim vai brincando com a linguagem
pode crer, valew.
Cara olha meu código por favor.
abstract class BaseDAO{
private $conexao;
public function __construct()
{
$this->conexao = Conexao::getConnection();
}
private function setParams($statement, $parameters = array())
{
foreach ($parameters as $key => $value) {
$this->bindParam($statement, $key, $value);
}
}
private function bindParam($statement, $key, $value)
{
$statement->bindParam($key, $value);
}
public function query($rawQuery, $params = array())
{
$stmt = $this->conexao->prepare($rawQuery);
$this->setParams($stmt, $params);
$stmt->execute();
}
public function select($rawQuery, $params = array()):array
{
$stmt = $this->conexao->prepare($rawQuery);
$this->setParams($stmt, $params);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function selectAll($rawQuery, $params = array()):array
{
$stmt = $this->conexao->prepare($rawQuery);
$this->setParams($stmt, $params);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
//Esse código está no meu UsuarioDAO.
public function findByUsuario($usuario) {
$result = $this->select("SELECT * FROM usuarios WHERE usuario = :usuario",
array(":usuario"=>$usuario));
var_dump($result);
}
Quando faço uma consulta com um usuario que não existe na minha base de dados, oque ele retorna? Pois pra mim só retorna erro. e quando faço a consulta com um usuario que existe no BD funciona normalmente.
Eu achei que ele iria retornar um array vazio, mas não é isso e não estou sabendo oque tá vindo.
Muito vago cara, erros existem vários, melhor postar o que retorna… mas quando não tem registro na base costuma retornar false… (só ler a documentação jovem, tá tudo lá)