Php: цикл прерывается при вызове метода внутри класса в какое-то время - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть проблема в классе, которую я не могу решить, цикл прерывается в getAlojamiento (), когда я вызываю getImagenes () в то время как. В этом случае 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 ]

1 голос
/ 02 февраля 2012

Проблема в том, что вы используете $this->dbResults для обоих запросов.Когда вы звоните getImagenes, вы забиваете dbResults в getAlojamiento.

0 голосов
/ 02 февраля 2012

Простое решение, позволяющее избежать влияния первого запроса 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;
0 голосов
/ 02 февраля 2012
            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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...