Foros del Web » Programando para Internet » PHP »

Como sabe si una consulta esta vacia usando PDO??

Estas en el tema de Como sabe si una consulta esta vacia usando PDO?? en el foro de PHP en Foros del Web. Hola a todos, resulta que tengo un buscador por ciertos parametros. Al hacer una consulta donde no existen registros coincidentes quiero mostrar un mensaje, pero ...
  #1 (permalink)  
Antiguo 30/08/2010, 14:49
Avatar de richicasas  
Fecha de Ingreso: abril-2007
Ubicación: Colombia
Mensajes: 692
Antigüedad: 17 años
Puntos: 13
Pregunta Como sabe si una consulta esta vacia usando PDO??

Hola a todos, resulta que tengo un buscador por ciertos parametros. Al hacer una consulta donde no existen registros coincidentes quiero mostrar un mensaje, pero no he podido hayar la forma de saber si la consulta esta vacia. Uso PDO y este es mi codigo:
model.php
Código PHP:
public function search($tipo$dato)
        {
            
$this->tipo     $tipo;
            
$this->dato     $dato;
            
$this->consulta $this->db->prepare('SELECT * FROM usuarios WHERE accion = 1 AND '.$this->tipo.' LIKE ?');
            
$this->consulta->execute(array( '%'.$this->dato.'%'));
            return 
$this->consulta;
        } 
controlador.php
Código PHP:
public function buscar($var)
        {
            include(
'models/usuario.php');
            
$this->tipo       $this->tipos[$var['tipo']];
            
$this->dato       $var['dato'];
            
$usuario           = new usuario();
            
$listam           $usuario->search($this->tipo$this->dato);
            echo 
count($usuario);// AQUI INTENTE SABER SI ME MANDABA CERO, PERO MARCA 1 SIEMPRE
            
$datos['listam']  = $listam;
            
$this->view->show('usuario/lista.php',$datos);
//En la vista recorro con un foreach
        

No puedo colocar fetch() en el controlador ya que no tengo instanciada la clase de la DB, ya que solo lo hago en los modelos.

Gracias por cualquier ayuda.
__________________
Juguetes Sexuales
  #2 (permalink)  
Antiguo 30/08/2010, 16:58
 
Fecha de Ingreso: octubre-2009
Mensajes: 240
Antigüedad: 14 años, 6 meses
Puntos: 6
Respuesta: Como sabe si una consulta esta vacia usando PDO??

El count() no se lo deberías hacer al la variable '$listam' ?
  #3 (permalink)  
Antiguo 30/08/2010, 17:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Como sabe si una consulta esta vacia usando PDO??

De hecho PDO tiene un método rowCount que te permite obtener el número de filas.

Saludos.
  #4 (permalink)  
Antiguo 30/08/2010, 17:52
Avatar de richicasas  
Fecha de Ingreso: abril-2007
Ubicación: Colombia
Mensajes: 692
Antigüedad: 17 años
Puntos: 13
De acuerdo Respuesta: Como sabe si una consulta esta vacia usando PDO??

Pero si uso algun metodo de PDO me tocaria instanciar la conexion con la BD en el controlador y e lo que quiero evitar.
__________________
Juguetes Sexuales
  #5 (permalink)  
Antiguo 30/08/2010, 18:13
atrianaster
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como sabe si una consulta esta vacia usando PDO??

Quizás esta fuente te sirva de algo http://www.forosdelweb.com/f68/numer...on-pdo-804971/

Saludos.
  #6 (permalink)  
Antiguo 30/08/2010, 18:19
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Como sabe si una consulta esta vacia usando PDO??

Cita:
Iniciado por GatorV Ver Mensaje
De hecho PDO tiene un método rowCount que te permite obtener el número de filas.

Saludos.
Una consulta con respecto a rowCount, puede ser que en algunas base de datos no traiga la cantidad de filas afectadas por la consultas select, es que en el manual que esta en ingles y no entiendo mucho y los traductores me lo dejan en indígena básico.
Es que en el manual en la parte de aportes hasta ponen un codigo:
Código PHP:
Ver original
  1. <?php
  2. class MyPDO extends PDO {
  3.     private $queryString;
  4.  
  5.     public function query(/* ... */) {
  6.         $args = func_get_args();
  7.         $this->queryString = func_get_arg(0);
  8.  
  9.         return call_user_func_array(array(&$this, 'parent::query'), $args);
  10.     }
  11.  
  12.     public function rowCount() {
  13.         $regex = '/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i';
  14.         if (preg_match($regex, $this->queryString, $output) > 0) {
  15.             $stmt = parent::query("SELECT COUNT(*) FROM {$output[1]}", PDO::FETCH_NUM);
  16.  
  17.             return $stmt->fetchColumn();
  18.         }
  19.  
  20.         return false;
  21.     }
  22. }
  23.  
  24. $pdo = new MyPDO("sqlite::memory:");
  25. $result = $pdo->query("SELECT row1, row2 FROM table WHERE something = 5");
  26.  
  27. if ($pdo->rowCount() > 0) {
  28.     echo "{$result['row1']}, {$result['row2']}";
  29. }

Gracias...
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #7 (permalink)  
Antiguo 30/08/2010, 18:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Como sabe si una consulta esta vacia usando PDO??

No necesariamente ya que estas regresando el valor puedes hacer echo $listam->rowCount para sacar el número de resultados.

Saludos.
  #8 (permalink)  
Antiguo 30/08/2010, 18:28
Avatar de richicasas  
Fecha de Ingreso: abril-2007
Ubicación: Colombia
Mensajes: 692
Antigüedad: 17 años
Puntos: 13
De acuerdo Respuesta: Como sabe si una consulta esta vacia usando PDO??

Si GatorV, tienes toda la razon. Me funciono. Muchas gracias.
Yo lo decia porque en la vista estaba utilizando el metodo fetch() ( tambien de PDO) para recorrer los datos y me sacaba error que no tenia definido el metodo, entonces pense que este tampoco funcionaba por ser de PDO.

De nuevo gracias.
__________________
Juguetes Sexuales

Etiquetas: pdo, vacias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:07.