Php:在类中调用一段时间内的方法时循环中断

时间:2012-02-02 13:39:42

标签: php class while-loop

我在一个我无法解决的类中遇到问题,当我在while内部调用getImagenes()时,循环在getAlojamiento()中断。在这种情况下,getAlojamiento()只返回一行,它应该返回所有行。以下是涉及的方法:

 //THIS GETS THE ROWS FROM A TABLE AND RETURN AN ARRAY, IF $id IS SET, CHECKS IF id_asoc == $id
 public function getImagenes($table, $id=false){
    $return = '';
    //checks if id id == true
    if($id){
        $sql="SELECT * FROM $table WHERE id_asoc = '$id' ORDER BY id DESC";
    }else{
        $id = '';
        $sql="SELECT * FROM $table ORDER BY id DESC";
    }
    //this make the sql request (returns an array)
    if(!$this->MySQLQuery($sql)){
        $return = false;
        }else{
        if($this->dbNumberRows == 0){ //cheks if there are results
            $return = false;
        }else{ //if has results makes and fills an array
            $items = array();
            while($f = mysql_fetch_object($this->dbResults)){
                $items[$f->id]['id'] = $f->id;
                $items[$f->id]['id_asoc'] = $f->id_asoc;
                $items[$f->id]['comentario'] = htmlentities($f->comentario);
                $items[$f->id]['nombre'] = htmlentities($f->nombre);
                }
            $return = $items;
        }
    }
    return $return;
}


 //THIS GETS THE ROWS FROM A TABLE AND RETURN AN ARRAY
   public function getAlojamiento($id=false){
        $return = '';
        //checks if id id == true 
        if($id){
            $sql="SELECT * FROM tb_alojamiento WHERE id = '$id'  LIMIT 1";
        }else{
            $id = '';
            $sql="SELECT * FROM tb_alojamiento ORDER BY titulo ASC";
        }
    //this make the sql request (returns an array)
    if(!$this->MySQLQuery($sql)){
        $return = false;
        }else{
        if($this->dbNumberRows == 0){ //cheks if there are results
            $return = false;
        }else{ //if has results makes and fills an array
            $items = array();
            while($f = mysql_fetch_object($this->dbResults)){
                $imagenes_arr = $this->getImagenes('tb_alo_imagenes', $f->id); //this is causing the break
                $items[$f->id]['id'] = $f->id;
                $items[$f->id]['titulo'] = $f->titulo;
                $items[$f->id]['telefono'] = $f->telefono;
                $items[$f->id]['descripcion'] = $f->descripcion;
                $items[$f->id]['email'] = $f->email;
                $items[$f->id]['url'] = $f->url;
                $items[$f->id]['direccion'] = $f->direccion;
                $items[$f->id]['ubicacion'] = $f->ubicacion;
                $items[$f->id]['coordenadas'] = $f->coordenadas;
                $items[$f->id]['disponibilidad'] = $f->disponibilidad;
                $items[$f->id]['tarifas'] = $f->tarifas;
                $items[$f->id]['servicios'] = $f->servicios;
                $items[$f->id]['theme'] = $f->theme;
                $items[$f->id]['premium'] = $f->premium;
                $items[$f->id]['img_ppal_id'] = $f->img_ppal_id;    
                $items[$f->id]['imagenes'] = $imagenes_arr;


            }
            $return = $items;
        }
    }
    return $return;
}

3 个答案:

答案 0 :(得分:1)

问题是您对两个查询都使用$this->dbResults。当您致电getImagenes时,您正在dbResultsgetAlojamiento

答案 1 :(得分:0)

            while($f = mysql_fetch_object($this->dbResults)){
                $items[$f->id]['id'] = $f->id;
                $items[$f->id]['id_asoc'] = $f->id_asoc;
                $items[$f->id]['comentario'] = htmlentities($f->comentario);
                $items[$f->id]['nombre'] = htmlentities($f->nombre);
                }
            $return[] = $items;

您将数组设置为单个$ items数组。您需要将它添加到$ return数组。

答案 2 :(得分:0)

避免让第一个mysql查询影响其他查询的简单解决方案是首先完成它:

//first loop over the result set from first query

while($f = mysql_fetch_object($this->dbResults))
{
    //note: no call to $this->getImagenes here!
    $items[$f->id]['id'] = $f->id;
    $items[$f->id]['titulo'] = $f->titulo;
    ....
}

//only now you fetch the images in a second pass 

foreach( $items as $id => $item )
{
    $items[$id]['imagenes'] = $this->getImagenes('tb_alo_imagenes', $id);
}

//return the complete $items array

$return = $items;