2012-02-02 44 views
0

我有一個類,我無法解決的問題,循環中getAlojamiento()中斷時,我調用getImagenes()內部。在這種情況下,getAlojamiento()只返回一行,它應該返回所有的行。這裏所涉及的方法:Php:循環休息時,在類中調用方法

//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; 
} 
+0

什麼是PHP的錯誤? – ralfe 2012-02-02 13:44:02

回答

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; 
+0

謝謝我正在尋找這樣的東西! – 2012-02-08 16:58:46

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; 

你設置陣列是單個$項目陣列。您需要將其添加到$ return數組中。

+0

這是將$ items添加到$ return數組末尾的簡寫形式。 – Jim 2012-02-02 13:48:16

1

問題是您正在使用$this->dbResults進行這兩個查詢。當您致電getImagenes時,您正在getAlojamiento中破壞dbResults

+0

感謝您的信息。我該如何解決它? – 2012-02-03 00:32:12

+0

當您執行第二個查詢時,您需要確保使用兩個單獨的結果對象。也許讓'$ this-> MySQLQuery($ sql)'返回你可以使用的結果對象,而不是將它存儲在類中。 – Jim 2012-02-03 10:09:19