【问题标题】:PDO foreach echoing the same valuePDO foreach 回显相同的值
【发布时间】:2017-05-09 13:13:41
【问题描述】:

您好,我正在使用 PDO 连接到数据库,并且我有一个类具有查看查询结果的功能,在表中我有相同的名称 Juan 和 Pedro 但是当我使用 foreach 打印它们时循环我让 Juan 打印了 7 次

class Posts extends Connection{
    public function __construct(){
        parent::__construct();
    }
    public function get_result(){
        $res=self::$conn->prepare("SELECT * FROM POSTS");
        $res->execute();
        $array=$res->fetch(PDO::FETCH_ASSOC);
        foreach($array as $value){
            echo $array['AUTHOR'] . "<br>";
        }
    }
}

【问题讨论】:

  • print_r($array).
  • 您想使用fetchAllfetch 只得到一行。这一行将有 7 列,因此您循环遍历这些列,但只回显一个特定列。
  • @u_mulder 我试过 print_r 和 var_dump 几乎一样,它无法帮助我弄清楚如何解决问题
  • @Jeff 我试过 fetchAll 但我没有运气:(.

标签: php pdo foreach


【解决方案1】:

问题来了

public function get_result(){
    $res=self::$conn->prepare("SELECT * FROM POSTS");
    $res->execute();
    $array = $res->fetch(PDO::FETCH_ASSOC);
    // $array has fields for ONE fetched row.

    // here you iterate over fields of ONE fetched row
    // and echo one field `AUTHOR`
    foreach ($array as $value) {
        echo $array['AUTHOR'] . "<br>";
    }
}

解决方案 - 必须循环获取行,通常是while 循环:

public function get_result(){
    $res=self::$conn->prepare("SELECT * FROM POSTS");
    $res->execute();

    // here your fetch every row of a result set
    while ($array = $res->fetch(PDO::FETCH_ASSOC)) {
        echo $array['AUTHOR'] . "<br>";
    }
}

【讨论】:

  • 先生,我知道该怎么做,但我严格地尝试使用 foreach 循环来做到这一点,无论如何,谢谢。
【解决方案2】:

您使用PDOStatement::fetch(),它只会得到一个(第一行,下一个)行。 所以你迭代了一行,这给了你 7 圈(因为你显然有 7 列)$array['AUTHOR'] 的结果相同。

如果你想要整个结果集,你需要使用fetchAll()
这将返回一个包含所有行的数组,然后您可以对其进行迭代。

public function get_result(){
    $res=self::$conn->prepare("SELECT * FROM POSTS");
    $res->execute();
    $array=$res->fetchAll(PDO::FETCH_ASSOC);
    foreach($array as $row){
        echo $row['AUTHOR'] . "<br>";
    }
}

【讨论】:

  • 它按我的需要工作。我试图直接这样做: foreach($array=$res->fetchAll(PDO::FETCH_ASSOC) as $row){ echo $row['AUTHOR'] 。 "
    ";我不知道为什么它在我尝试时不起作用,但你帮了我很多,谢谢。
猜你喜欢
  • 2013-08-18
  • 1970-01-01
  • 2012-09-02
  • 2014-02-06
  • 2018-04-02
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多