【问题标题】:MySQLi: Fetch all from table, result has pass-by-referenceMySQLi:从表中获取所有内容,结果具有传递引用
【发布时间】:2012-10-09 02:50:44
【问题描述】:

我在使用 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);
}

但我想这太过分了,必须有一个更简单的解决方案。

【问题讨论】:

    标签: php arrays reference mysqli fetch


    【解决方案1】:

    尝试像这样取消设置:

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

    【讨论】:

    • 这就是我想要的!谢谢!
    • 你的回答有问题,serialiZe not serialiSe
    • 同样在unserialize函数中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多