PDO foreach回显相同的值

时间:2016-12-23 21:32:31

标签: php pdo foreach

您好我正在使用PDO连接到数据库,我有一个类,其中有一个查看查询结果的函数,在表中我有相同的名称Juan和Pedro但是当我使用foreach打印它们时循环我得到胡安印刷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>";
        }
    }
}

2 个答案:

答案 0 :(得分:3)

这是问题

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

答案 1 :(得分:1)

您使用PDOStatement::fetch(),它只会获得一行(第一行,下一行)。 所以你迭代了一行,这给了你7个turnes(因为你显然有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>";
    }
}