Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problema al regresar un solo registro de una consulta

Estas en el tema de Problema al regresar un solo registro de una consulta en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Eh estado trabajando en un driver simple para mysql y me he encontrado con el siguiente caso al momento de devolver datos cuando el resultado ...
  #1 (permalink)  
Antiguo 28/10/2009, 02:13
 
Fecha de Ingreso: agosto-2008
Ubicación: Puebla, Mexico.
Mensajes: 84
Antigüedad: 15 años, 8 meses
Puntos: 0
Problema al regresar un solo registro de una consulta

Eh estado trabajando en un driver simple para mysql y me he encontrado con el siguiente caso al momento de devolver datos cuando el resultado de la query es de solo un registro.

Aplicando un print_r para debug me doy cuenta que el array esta bien formado pero tiene 'algo curioso', que efectivamente se trata de un array y no de una matriz por lo que al recorrerlo con un foreach no muestra los resultados.

Código PHP:
stdClass Object
(
    [
id] => 1
    
[value_1] => test
    
[value_2] => test
    
[value_3] => test

Sin embargo cuando el resultado de la query es de mas registros, logicamente me crea muy bien mi matriz de resultados por lo que puedo recorrerla y presentar mis datos sin problemas.

Código PHP:
Array
(
    [
0] => stdClass Object
        
(
            [
id] => 2
            
[value_1] => test2
            
[value_2] => test2
            
[value_3] => test2
        
)

    [
1] => stdClass Object
        
(
            [
id] => 1
            
[value_1] => test
            
[value_2] => test
            
[value_3] => test
        
)


El problema surge en la implementacion, suponiendo que tengo un metodo que me muestre la lista de esos elementos, en mi implementacion quedaria asi:

Código PHP:
<?php foreach($obj->getElementos() as $elemento):?>
    <tr>
        <td><?php echo $elemento->id?></td>
        <td><?php echo $elemento->value_1?></td>
        <td><?php echo $elemento->value_2?></td>
        <td><?php echo $elemento->value_3?></td>
    </tr>        
<?php endforeach;?>
Cuando la lista de esos elementos sea de 1 solo, los resultados no son mostrados, el metodo 'se compone' cuando la lista es mayor y es donde surge mi duda de como solucionar ese problema, aqui les dejo el metodo que me crear mi matriz de resultados y espero puedan darme algunos consejos de como solucionarlo, gracias.


Código PHP:
private function _fetchQuery(){
    
$this->_fetched = array();
    if(
$this->numRows() == 1) {
        
$this->_fetched mysql_fetch_object($this->_result);
    } else {
        while(
$row mysql_fetch_object($this->_result)) {
            
array_push($this->_fetched$row);
        }
    }
    return 
$this->_fetched;

  #2 (permalink)  
Antiguo 28/10/2009, 08:32
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Problema al regresar un solo registro de una consulta

No se si no estoy entendiendo bien el "problema", pero si quieres que el resultado siempre sea un arreglo independientemente si el resultado es de 0, 1 o 20 objetos...

Código PHP:
private function _fetchQuery(){
    
$this->_fetched = array();
    if(
$this->numRows() > 0) {
        while(
$row mysql_fetch_object($this->_result)) {
            
array_push($this->_fetched$row);
        }
    }
    return 
$this->_fetched;

Saludos
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #3 (permalink)  
Antiguo 29/10/2009, 06:41
 
Fecha de Ingreso: agosto-2008
Ubicación: Puebla, Mexico.
Mensajes: 84
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problema al regresar un solo registro de una consulta

Gracias por el interes mi buen Fridureiks, si de hecho asi lo tenia antes y eso me resuelve el problema, pero me genera otro...digamos que desde el inicio se que el resultado es un solo registro [en el caso de editar, cuando devuelves uno solo para llenar datos de un form] y entonces tienes tu codigo asi:
Código PHP:
$datos $obj->editarDatos(1);  //el 1 seria el id usado como referencia en la busqueda 
El codigo de arriba nos devuelve un unico registro, entonces al tener los datos asi, no puedo mostrarlos en el value de la siguiente manera:
Código PHP:
<input .... value="<?php echo $datos->nombre_del_campo?>"  />
Por que no se puede ? ...aaa como puedes ver abajito el resultado al darle print_r, se creo la matriz y entonces esa es la posicion 0 y entonces tendria que mostrarlos asi:

Código PHP:
Array
(
    [0] => stdClass Object
        (
            [id] => 2
            [value_1] => test2
            [value_2] => test2
            [value_3] => test2
        ) 

<input .... value="<?php echo $datos['0']->nombre_del_campo?>"  />
De hecho con eso se soluciona, pero como que no se ve 'bonito' xD por eso andaba en el foro para revisar unos consejos y solucionar ese detalle pero conservando la 'vanidad' en el codigo xD, que opinas ?
  #4 (permalink)  
Antiguo 29/10/2009, 08:05
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Respuesta: Problema al regresar un solo registro de una consulta

En ese caso supongo que te convendria que el metodo editarDatos no devuelva directamente el arreglo que te da _fetchQuery sino solo su posicion 0 (salvo que la consulta no arroje resultados)

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #5 (permalink)  
Antiguo 29/10/2009, 19:53
 
Fecha de Ingreso: agosto-2008
Ubicación: Puebla, Mexico.
Mensajes: 84
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problema al regresar un solo registro de una consulta

genial sr....genial ! esa opcion tambien me gusta, lo que habia hecho era asignarle un indice en caso de que la consulta fuera de 1 registro y ya me resolvia los 2 problemas que mencionaba, pero tus respuestas estuvieron muy bien y me dieron alternativas...gracias por el interes.

Código PHP:
private function _fetchQuery(){
    
$this->_fetched = array();
    if(
$this->numRows() == 1) {
        
$this->_fetched['row'] = mysql_fetch_object($this->_result);
    } else {
        while(
$this->_row mysql_fetch_object($this->_result)) {
            
array_push($this->_fetched$this->_row);
        }
    }
    return 
$this->_fetched;

Asi quedaba mi funcion y puesto que veo que el tema no da paramas, lo damos por cerrado.
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 22:44.