Intereting Posts

Считать строку с pdo и реляционной базой данных

У меня есть небольшая проблема, у меня есть база данных с двумя таблицами, пользователями и комментариями, и мне нужно распечатать результат с помощью pdo. если я попробую этот код, все отлично работает:

$stmt = $dbConnection->prepare("SELECT comment_text, username FROM users, comments WHERE users.user_id = comments.user_id"); $stmt->execute(); $stmt->fetch(PDO::FETCH_ASSOC); foreach ($stmt as $row) { echo $row['comment_text'] . "<br>By " . $row['username'] . "<br>"; } 

Но если я попытаюсь добавить переменную, которая получает результат fetch, я получаю совершенно другой результат только с двумя строками и только с первой буквой значения …

 $stmt = $dbConnection->prepare("SELECT comment_text, username FROM users, comments WHERE users.user_id = comments.user_id"); $stmt->execute(); $comment = $stmt->fetch(PDO::FETCH_ASSOC); foreach ($comment as $row) { echo $row['comment_text'] . "<br>By " . $row['username'] . "<br>"; } 

если я попробую этот код, все отлично работает:

это не.
таким образом вы теряете первый комментарий. Так что это должно быть просто

 $stmt->execute(); foreach($stmt as $row ) { echo $row['comment_text']."<br>By ".$row['username']."<br>" ; } 

в случае, если вы хотите сохранить результат в массиве, вы должны использовать для этого соответствующую функцию :

 $stmt->execute(); $comments = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach($comments as $row ) { echo $row['comment_text']."<br>By ".$row['username']."<br>" ; } 

в то время как fetch() получает только одну запись, fetchAll () делает то, что предлагает название

Оба образца не работают должным образом:

В первом вы перебираете каждую строку, кроме первой строки, для которой вы сделали выборку, а затем ничего не делали с этой первой строкой.

Во втором вы перебираете все поля первой строки, которые производят некоторый необъяснимый вывод.