У меня есть небольшая проблема, у меня есть база данных с двумя таблицами, пользователями и комментариями, и мне нужно распечатать результат с помощью 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 () делает то, что предлагает название
Оба образца не работают должным образом:
В первом вы перебираете каждую строку, кроме первой строки, для которой вы сделали выборку, а затем ничего не делали с этой первой строкой.
Во втором вы перебираете все поля первой строки, которые производят некоторый необъяснимый вывод.