使用fetch中的对象填充数组

时间:2013-09-26 02:46:50

标签: php arrays

这里对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个元素的数组,这些元素都是“用户”。

为什么会这样?这样做的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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以保存连接。