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有一个 reference &,所以当$usersArray 被填满时。每次执行 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 回答