循环不循环

时间:2014-07-06 20:17:21

标签: php mysql database loops foreach

所以我有一堆用户需要显示的内容。我从数据库中获取用户,然后显示它们。这是我正在做的事情

//Get users from DB
$stmt = $con->prepare("SELECT * FROM followers where follow_to = :user");
$stmt->bindValue(':user', $username, PDO::PARAM_STR);
$stmt->execute();

//Place results in an array 
$posts = array();
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $posts =  array(
        'follow_from' => $row['follow_from']
        );
    }   

//And loop users 
foreach($posts as $post) {
        $post;
?>
<?php 
//Display users 
echo $posts['follow_from']; }
?>

现在的问题是,我只返回一个结果。因此,如果我有一个以上的结果,它会被覆盖。你能帮忙的话,我会很高兴。

4 个答案:

答案 0 :(得分:2)

$posts = array();
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $posts[$row['follow_from']] =  1;
    }   


foreach($posts as $key => $useless) {

//Display users 
echo $key; }

答案 1 :(得分:2)

正如其他人所说,但没有在答案中发帖,你是在每个循环创建一个新数组,而不是将值附加或“推”到$ posts数组中。

$posts = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    $posts[] =  array(
    'follow_from' => $row['follow_from']
    );
}   

foreach($posts as $post) {
    // $post is equal to $posts[n] where n is the index of the current loop 0,1,2,...
    echo $post['follow_from'];
}

&GT;

您会注意到我在[]的末尾添加了$posts,这将在数据中插入新的数字元素。您也可以使用array_push(),但速度通常较慢。

上面的代码将输出一个类似于以下内容的数组。

$posts = array(
   array('follow_from',data),
   array('follow_from',data),
   array('follow_from',data),
   ...
);

关于向数组附加值的示例,您可以查看以下代码。

$array = array('value 1');
$array[] = 'value 2';
array_push($array,'value 3');
print_r($array);

/*
 Array(
   [0] = "value 1"
   [1] = "value 2"
   [2] = "value 3"
 )
*/

答案 2 :(得分:2)

您可以在while循环中使用$row['follow_from']。 但是,根据您当前的操作,您可能希望使用PDOStatement::fetchAll直接填充您的帖子数组。

$posts = $stmt->fetchAll();

foreach($posts as $post) { 
    echo $post['follow_from']; 
}

答案 3 :(得分:1)

代码中的

使用fetchAll()代替fetch()