Retorno de uma query PDO

506 views
Skip to first unread message

Janes Roberto da Costa

unread,
Jun 10, 2010, 9:20:43 AM6/10/10
to list...@googlegroups.com

Bom dia pessoal,

Estou usando uma classe para uso do PDO (http://tonylandis.com/php/php5-pdo-singleton-class/ )

E me deparei com um problema, que não é dela, e sim do próprio PDO, e está me gerando um erro.

Bem, quando executamos um query no PDO, e o SELECT não encontra nenhum registro, ele retorna false.

Queria saber se existe alguma forma dele retornar um objeto vazio ao invés de false.

O método responsável pela query é este:

 

public function query($statement) {

                return self::$PDOInstance->query($statement);

  }

 

Porém, como o PDO não existem um método count(), para evitar ter que enviar uma outra query só como contador, eu uso o fetchAll(), que está declarado neste método. Assim ele me retorna um array e eu uso a função count() do PHP para pegar a quantidade de registros:

 

public function queryFetchAllAssoc($statement) {

                return self::$PDOInstance->query($statement)->fetchAll(PDO::FETCH_ASSOC);

}

 

Porém, este método gerará um erro caso o a consulta no banco não encontre nenhum arquivo, pois ele tentará dar um fetchAll() num valor booleano (o false que será retornado pelo método query()).

 

Fiz a seguinte alteração:

 

public function queryFetchAllAssoc($statement) {

                               $stmt = self::$PDOInstance->query($statement);

                               if(!$stmt){

                                               return false;

                               }else{

                                               $stmt->setFetchMode(PDO::FETCH_ASSOC);

                                               $result = $stmt->fetchAll();

                                               unset($stmt);                                  

                                               return $result;

                               }                             

    }

 

Até funciona, mas a consulta ficou um pouco mais lenta, pela fato de ter criado o objeto e setado ele como null.

 

Minha dúvida então é: Tem como fazer com que o método query retorne um objeto vazio ao invés de false, ou fazer uma validação antes de chamar o fetchAll sem precisar criar um objeto?

 

Abraços!

.....................................................................................................................................

Janes Roberto da Costa

Analista de Sistemas (TAIG)
SEDUC–Secretaria de Estado de Educação de Mato Grosso

www.seduc.mt.gov.br
COT–Coordenadoria de Tecnologia da Informação
Telefone: (65) 3613-6394

E-mail: janes...@seduc.mt.gov.br

“Se, pois, o Filho do Homem vos libertar, verdadeiramente sereis livres.

E conhecereis a verdade, e a verdade vos libertará.” (João 8:32;36)

 

brunosinister

unread,
Jun 10, 2010, 9:29:46 AM6/10/10
to list...@googlegroups.com
Amigão pelo que entendi seu problema é efetuar um count sem usar o fetchAll, isso talvés seja útil:

http://usphp.com/manual/en/function.PDOStatement-rowCount.php
Bruno Rodrigues de Araujo.


--
============================================================
LEIAM SEMPRE AS REGRAS DA LISTA:
http://groups.google.com.br/group/listaphp/web/regras-da-lista-php
--
LISTA PHP > http://groups.google.com.br/group/listaphp
--
REVISTA PHP > http://www.revistaphp.com.br
--
AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
--
PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
--
DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
============================================================

Janes Roberto da Costa

unread,
Jun 10, 2010, 10:05:38 AM6/10/10
to list...@googlegroups.com

Não não, não é isso.

Preciso que, quando o resultado for zero (o SELECT retornar vazio), ao invés de retornar false, retorne um objeto nulo.

Ou de alguma validação para que o função abaixo não gere um erro:

public function queryFetchAllAssoc($statement) {

                return self::$PDOInstance->query($statement)->fetchAll(PDO::FETCH_ASSOC);

}

 

 

.....................................................................................................................................

Janes Roberto da Costa

Analista de Sistemas (TAIG)
SEDUC–Secretaria de Estado de Educação de Mato Grosso

www.seduc.mt.gov.br
COT–Coordenadoria de Tecnologia da Informação
Telefone: (65) 3613-6394

E-mail: janes...@seduc.mt.gov.br

“Se, pois, o Filho do Homem vos libertar, verdadeiramente sereis livres.

E conhecereis a verdade, e a verdade vos libertará.” (João 8:32;36)

 

Reply all
Reply to author
Forward
0 new messages