2012-10-18 42 views
2

我在使用MySQLi時遇到問題,我想創建一個函數以將數據庫中的所有用戶作爲數組返回。MySQLi:從表中獲取所有,結果已通過引用

下面的代碼:

public function getAll() { 
    $statement = $this->database->prepare('SELECT `id`, `email`, `firstname`, `lastname`, `last_time`, `type`, `activated`, `enabled` FROM `users` ORDER BY `id`'); 
    $statement->execute(); 
    $statement->bind_result($result['id'], $result['email'], $result['firstname'], $result['lastname'], $result['last_time'], $result['type'], $result['activated'], $result['enabled']); 

    $users = array(); 

    while($statement->fetch()) { 
     $users[$result['id']] = $result; 
    } 

    return $users; 
} 

的問題是&$result具有參考&,所以當$users陣列得到的填補。每次執行while循環時,先前插入的記錄都將更新爲&$result變量中的最後一個值。 因此,整體結果$users將具有每個記錄的所有相同數據的列表。

那麼如何從&$result變量中刪除參考?

它通過把每列由它自己在新的數組:

while($statement->fetch()) { 
    $users[$result['id']] = array($result['id'], $result['email'], ..etc); 
} 

但是,太多了,我想,必須有一個更簡單的解決方案。

回答

1

試試設置這樣的:

$users[$result['id']] = unserialize(serialize($result)); 
+0

這就是我一直在尋找!謝謝! –

+1

你的答案有一個問題,serialiZe不serialiSe –

+0

@Stijntjhe謝謝你看到它:D – Udan