2

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);
}

しかし、それは多すぎると思います。もっと簡単な解決策が必要です。

4

1 に答える 1

1

次のように設定を解除してみてください。

$users[$result['id']] = unserialize(serialize($result));
于 2012-10-18T15:32:10.397 に答える