2013-09-26 115 views
1

這裏比較新的PHP,所以我可能試圖做太多。用取回對象填充數組

我有一個對象Group,我從數據庫中獲取所有組,並將它們發送到數組,然後將它發送到我的視圖。

所以我必須:

$groups=array(); 
$group=new Group(); 
$stmt=$databaseconnection->prepare("SELECT Id, Name, Description FROM Groups"); 
$stmt->execute(); 
$stmt->bind_result($group->Id, $group->Name, $group->Description); 

while($stmt->fetch()){ 
    $groups[]=$group; 
    $group=new Group(); 
    } 

return $groups; 

這個返回編號總的元素我應該有數組中元素的數組,但他們都是一樣的最後一個元素。如果我有3個組,最後一個是「用戶」,我有一個包含3個元素的數組,都是「用戶」。

爲什麼會出現這種情況?這樣做的最好方法是什麼?

謝謝!

回答

0

bind_result將列存儲到每次獲取調用的變量中,因此您需要每次都創建一個新組,並將組的數據成員設置爲適當的值。

... 
$stmt->bind_result($id, $name, $description); 

while($stmt->fetch()){ 
    $group = new Group(); 
    $group->Id = $id; 
    $group->Name = $name; 
    $group->Description = $description; 

    $groups[] = $group; 
} 
return $groups; 
+0

嘎,這使我的一些更長的查詢和更大的對象是一個真正的痛苦。很高興我沒有超過我自己。謝謝! – Snowburnt

0

一個有趣的把戲我都在做這樣的事情不同的方式時,以簡化:

在我的倉庫類

我有一個返回基於ID的單個項目的功能,然後我有另一個類,返回各種項目組。所以我處理,像這樣:

$collection = array(); 

$stmt=$connect->prepare("SELECT Id FROM SOME_TABLE WHERE CRITERIA=?"); 
$stmt->bind_param("s", $Whatever); 
$stmt->execute(); 
$stmt->bind_result($id); 

while($stmt->fetch()){ 
    $collection[] = $this->getItem($id); 
    } 

時,你需要有一個選擇和多重選擇器,這非常有用,而且非常有用(的getItem根據傳入的id返回打造出來的對象)當您的類中有很多屬性/屬性時(您只需鍵入預準備語句,綁定參數,綁定結果和屬性分配一次)。

或者,您可以填充數組,然後關閉數據庫連接,然後在數組上執行foreach以保存連接。