Foros del Web » Programando para Internet » PHP »

PHP OO filtrar objetos de mysqli_query

Estas en el tema de filtrar objetos de mysqli_query en el foro de PHP en Foros del Web. Según la documentación de PHP , mysqli_query Cita: Retorna FALSE si hay fallas. Si una consulta del tipo SELECT, SHOW, DESCRIBE o EXPLAIN es exitosa ...
  #1 (permalink)  
Antiguo 23/12/2013, 05:24
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
filtrar objetos de mysqli_query

Según la documentación de PHP, mysqli_query

Cita:
Retorna FALSE si hay fallas. Si una consulta del tipo SELECT, SHOW, DESCRIBE o EXPLAIN es exitosa la funcion mysqli_query() retornara El objeto de la clase mysqli_result. Para otras consultas mysqli_query() retornara TRUE si tiene exito.
El problema es que en mi caso puede ocurrir que en la BD puede no haber resultados que devolver a la consulta.

En caso de que la BD esté vacía, el return de un método o una función me genera un "undefined" de la variable a retornar después de haber construido el array con los valores.

se me ha ocurrido que para que esto no ocurra puedo hacer lo siguiente

Código PHP:
Ver original
  1. class Tryclass extends Connect
  2. {
  3.     /*
  4.      * las propiedades
  5.      */
  6.      
  7.      //el resultado de un metodo
  8.      private    $tryresult;
  9.      
  10.      public function    tryfunction()
  11.      {
  12.          $sql   =   "SELECT *   FROM    trytable";
  13.          
  14.          $result_conexion   =   $this->connect($sql);
  15.          
  16.          if($result_conexion  !== FALSE  AND $result_conexion->lengths !==NULL)
  17.          {
  18.             while ( $value = mysqli_fetch_array( $result_conexion, MYSQLI_ASSOC ))
  19.             {
  20.                 $tryresult[] =   $value;
  21.             }
  22.          }
  23.          else
  24.          {
  25.             $tryresult    =   FALSE;
  26.          }
  27.        
  28.             return $tryresult;
  29.     }
  30. }

El filtro estaría en el if antes del while.

De manera que si no hay nada en la BD genere un FALSE para indicar en el front-end que no hay nada que recorrer en el foreach para el array y de esa manera que no genere tampoco un error en el foreach.

¿Existe algún otro método mejor de hacerlo?
__________________
Ayúdame a hacerlo por mi mismo.

Última edición por guardarmicorreo; 23/12/2013 a las 05:32
  #2 (permalink)  
Antiguo 23/12/2013, 06:14
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: filtrar objetos de mysqli_query

Si es un simple select *, porque no usas numrows, ahora si sabes que la bd puede estar vacia, para que hacerle una consulta?
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 23/12/2013, 06:28
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: filtrar objetos de mysqli_query

Cita:
Iniciado por xSkArx Ver Mensaje
Si es un simple select *, porque no usas numrows, ahora si sabes que la bd puede estar vacia, para que hacerle una consulta?
Ahí está el problema, en que el usuario final, sea un simple usuario o un administrador, no van a saber previamente si en la BD hay datos o no. Y Hacer una consulta para luego hacer otra... No me gusta nada, es sobre cargar. Imagina un sistema donde tengas miles de usuarios conectados a la vez.

Si por cada cosa que van a hacer hay que comprobar si la tabla está llena o vacía, me imagino que ese sistema irá a paso de tortuga por sobrecargar la BD.
__________________
Ayúdame a hacerlo por mi mismo.
  #4 (permalink)  
Antiguo 23/12/2013, 06:46
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: filtrar objetos de mysqli_query

No se por que no hay datos en la bd, para evitar el problema crearia un.script de instalacion y agregaria datos a la.bd, pero no creo que aea el caso, lo que me tiene intrigado es por que no hay datos en la.bd.
Buscando encintre esto, no se si sea lo que necesitas mysqli_real_query()
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.

Última edición por xSkArx; 23/12/2013 a las 06:56
  #5 (permalink)  
Antiguo 23/12/2013, 07:08
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: filtrar objetos de mysqli_query

Explico mejor el por qué puede que no hayan datos en una tabla de la BD.

Puede darse el caso de que el admin decida borrar o editar una entrada, entonces al cargar visualmente todas las entradas para seleccionar una que desea borrar o editar puede que otro admin haya borrado anteriormente todas las entradas, entonces ahí se da un caso de "tabla vacía".

En ese caso, he pensado esta solución, pero si hubiera una mejor para que no me muestre los notice pues quiero saberla :D
__________________
Ayúdame a hacerlo por mi mismo.
  #6 (permalink)  
Antiguo 23/12/2013, 07:44
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: filtrar objetos de mysqli_query

Se me ocurre algo pero creo que no es lo mas optimo, si el user o admin quiere borrar algo poner un alert y por ajax consultat si existe el id (imagino que es lo que quieres evitar) y ptoceder segun la respuesta de.ajax
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.

Etiquetas: filtrar, mysql, objetos, select, sql, variable
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 17:41.