使用pdo和关系数据库获取行

时间:2016-09-02 12:52:12

标签: php mysql pdo

我有一点问题,我有一个包含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>";
}

2 个答案:

答案 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)

你的样本都没有正常运作:

在第一行中,你遍历除了第一行之外的每一行,你进行了一次提取,然后对第一行没有任何作用。

在第二行中,您遍历第一行的每个字段,这会产生一些未预期的输出。