我有一点问题,我有一个包含2个表,用户和评论的数据库,我需要用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结果的变量,我会得到一个完全不同的结果,只有2行而且只有值的第一个字母......
$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>";
}
答案 0 :(得分:3)
如果我尝试这个代码,一切都很好:
不是。
这样你就失去了第一个评论。所以它应该只是
$stmt->execute();
foreach($stmt as $row )
{
echo $row['comment_text']."<br>By ".$row['username']."<br>" ;
}
如果您想将结果保存在数组中,则必须使用the appropriate function:
$stmt->execute();
$comments = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($comments as $row )
{
echo $row['comment_text']."<br>By ".$row['username']."<br>" ;
}
虽然fetch()
只获得一条记录,但fetchAll()正在按照顾名思义进行操作
答案 1 :(得分:0)
你的样本都没有正常运作:
在第一行中,你遍历除了第一行之外的每一行,你进行了一次提取,然后对第一行没有任何作用。
在第二行中,您遍历第一行的每个字段,这会产生一些未预期的输出。