1

PHP 在这里相对较新,所以我可能尝试做的太多了。

我有一个对象,组,我从数据库中获取所有组并将它们推送到一个数组,然后再将其发送到我的视图。

所以我有:

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

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

谢谢!

4

2 回答 2

0

bind_result 在每次 fetch 调用时将列存储到变量中,因此您需要每次创建一个新组并将该组的数据成员设置为适当的值。

...
$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;
于 2013-09-26T02:52:46.197 回答
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 以保存连接。

于 2013-09-26T15:03:38.693 回答