【问题标题】:Fetching data with PDO returns duplicate results使用 PDO 获取数据会返回重复的结果
【发布时间】:2014-05-18 16:42:05
【问题描述】:

我有这个代码:

...
$query->setFetchMode(PDO::FETCH_INTO, $this);
$query->execute();
$data = array();
while ($row = $query->fetch()) {
    $data[] = $row;
}
return $data;

如果我把 var_dump 放在这里:

var_dump($data);
return $data;

这是结果:

array (size=3)
  0 =>
    object(ChatRoom)[4]
        public 'id' string '3' (length=1)
        ...
  1 =>
    object(ChatRoom)[4]
        public 'id' string '3' (length=1)
        ...
  2 =>
    object(ChatRoom)[4]
        public 'id' string '3' (length=1)
        ...

如果我把 var_dump 放在这里:

while ($row = $query->fetch()) {
    $data[] = $row;
    var_dump($data);
}

这是结果:

array (size=1)
  0 =>
    object(ChatRoom)[4]
        public 'id' string '1' (length=1)
        ...
array (size=2)
  0 =>
    object(ChatRoom)[4]
        public 'id' string '2' (length=1)
        ...
  1 =>
    object(ChatRoom)[4]
        public 'id' string '2' (length=1)
        ...
array (size=3)
  0 =>
    object(ChatRoom)[4]
        public 'id' string '3' (length=1)
        ...
  1 =>
    object(ChatRoom)[4]
        public 'id' string '3' (length=1)
        ...
  2 =>
    object(ChatRoom)[4]
        public 'id' string '3' (length=1)
        ...

我试过 fetchAll 但结果是一样的。我做错了什么?

【问题讨论】:

    标签: php mysql pdo fetch


    【解决方案1】:

    您正在尝试使用不需要的功能。

    $query->setFetchMode(PDO::FETCH_INTO, $this);
    

    删除这一行^

    【讨论】:

    • 但我想返回一个 ChatRoom 对象而不是 stdObject
    • 不,你没有。你宁愿需要一个熟悉的数组,因为你肯定可以处理它
    • 我可以找到其他方法来管理它,但我想用这种方式来做到这一点,例如,当我得到一个 ChatRoom 对象列表时,我希望能够做到这一点:$chatroom[0]->delete();。无论如何,如果我找不到任何解决方案,我将使用 stdObject 或关联数组
    • 要填充一个对象,您必须更好地了解您的对象结构。好多了然而,在您不熟悉它之前,请使用常规数组
    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 2018-09-08
    • 2016-08-31
    • 2015-02-24
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多