Php PDO foreach回显相同的值

Php PDO foreach回显相同的值,php,pdo,foreach,Php,Pdo,Foreach,嗨,我使用PDO连接到数据库,我有一个类,它有一个函数来查看查询结果,在一个表中,我有相同的名字Juan和Pedro,但当我使用foreach循环打印它们时,我得到Juan打印7次 class Posts extends Connection{ public function __construct(){ parent::__construct(); } public function get_result(){ $res=self::$c

嗨,我使用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>";
        }
    }
}
class Posts扩展了连接{
公共函数构造(){
父项::_构造();
}
公共函数get_result(){
$res=self::$conn->prepare(“从帖子中选择*);
$res->execute();
$array=$res->fetch(PDO::fetch_ASSOC);
foreach($array作为$value){
echo$array['AUTHOR']。“
”; } } }
问题出在这里

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>";
    }
}
问题出在这里

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>";
    }
}

您使用的是
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>";
    }
}
公共函数get_result(){
$res=self::$conn->prepare(“从帖子中选择*);
$res->execute();
$array=$res->fetchAll(PDO::FETCH_ASSOC);
foreach($array作为$row){
echo$row['AUTHOR']。“
”; } }
您使用的是
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>";
    }
}
公共函数get_result(){
$res=self::$conn->prepare(“从帖子中选择*);
$res->execute();
$array=$res->fetchAll(PDO::FETCH_ASSOC);
foreach($array作为$row){
echo$row['AUTHOR']。“
”; } }
打印($array)
。您想使用
fetchAll
<代码>获取仅获取一行。这一行将有7列,因此您可以循环遍历这些列,但只回显一个特定列。@u\u mulder我已经尝试打印出与var\u dump几乎相同的内容。它不能帮助我找到解决问题的方法problem@Jeff我尝试了fetchAll,但没有成功:(.
print\r($array)
。您想使用
fetchAll
fetch
只获取一行。这一行将有7列,因此您可以循环遍历这些列,但只回显一个特定列。@u\u mulder我已经尝试打印出与var\u dump几乎相同的内容。它无法帮助我找到解决问题的方法problem@Jeff我试过了,但我没有不走运:(.我知道怎么做,先生,但我严格尝试使用foreach循环,无论如何,谢谢。我知道怎么做,先生,但我严格尝试使用foreach循环,无论如何,谢谢。它按我需要的方式工作。我正试图直接这样做:foreach($array=$res->fetchAll(PDO::FETCH_ASSOC)as$row){echo$row['AUTHOR']。“
”;}我不知道为什么它不能像我尝试的那样工作,但是你帮了我很多,谢谢。它按照我的需要工作。我尝试直接这样做:foreach($array=$res->fetchAll(PDO::FETCH\u ASSOC)as$row){echo$row['AUTHOR'].“
”;}我不知道为什么它不能像我尝试的那样工作,但是你帮了我很多,谢谢。