/** * Método que executa um select com base em um objeto Select informado * @param Select $select A consulta a ser realizada * @return ResultSetHydrator Um objetos contendo a resposta da interação */ public function selectObj(Select $select) { if (!$select->tabelaIsset()) { $select->from($this->tabela); } //Executando a query e definindo os databind $prepare = $this->pdo->prepare($select); //Executando a validação do PDO foreach ($select->getWhere()->getColunas() as $coluna => $valor) { if (!isset($this->colunas[$coluna])) { //Este trecho deve ser reavaliado pois impede a busca usando como base //colunas de tabelas referenciadas por inner throw new SqlException("Uma das colunas informadas não é válida(select - {$coluna})", 10); } $prepare->bindValue(":{$coluna}", $valor, $this->colunas[$coluna]->getTipo()); } //Executando de fato a consulta if (!$prepare->execute()) { throw new SqlException("Ocorreu um erro ao tentar executar a consulta"); } //Retorno da consulta return new ResultSetHydrator($this->objeto, $prepare); }