2016-12-23 2 views
0

Привет Я использую PDO для подключения к базе данных, и у меня есть класс, который имеет функцию для просмотра результатов запроса, в таблице у меня одноименные имена Хуан и Педро, но когда я печатать их с помощью цикла Еогеаспа я получаю Juan печататься 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 ($ array)'. –

+2

вы хотите использовать 'fetchAll'. 'fetch' получает только одну строку. И эта строка будет содержать 7 столбцов, поэтому вы пропустите эти столбцы, но выделите только один конкретный столбец. – Jeff

+0

@u_mulder Я пробовал print_r, который почти так же, как var_dump, не может помочь мне выяснить, как я могу решить проблему. –

ответ

1

Вы используете 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>"; 
    } 
} 
+0

Он работал так, как мне было нужно. Я пытался сделать это прямо следующим образом: foreach ($ array = $ res-> fetchAll (PDO :: FETCH_ASSOC) как $ 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, спасибо в любом случае. –

Смежные вопросы