2016-12-23 12 views
0

嗨我正在使用PDO連接到數據庫,我有一個類有一個查看查詢結果的功能,在一個表中我有相同的名字胡安和佩德羅,但是當我打印出來使用foreach循環,我得到胡安印刷7倍PDO foreach回顯相同的值

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

'的print_r($陣列)'。 –

+2

你想使用'fetchAll'。 'fetch'只有一行。這一行將有7列,所以你循環通過這些列,但只回聲一個特定的列。 – Jeff

+0

@u_mulder我試過print_r,它和var_dump幾乎相同它不能幫我弄清楚我怎麼能解決這個問題 –

回答

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

它工作,因爲我需要它。我試圖直接做到這一點:foreach($ array = $ res-> fetchAll(PDO :: FETCH_ASSOC )as $ row){ echo $ row ['AUTHOR']。「
」; }我不知道爲什麼它不起作用,因爲我試過了,但你幫了我很多,謝謝。 –

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

我知道該怎麼做那先生,但我嚴格地試圖用foreach循環來做,謝謝。 –