将所有结果分配给变量

时间:2011-06-28 20:43:25

标签: php mysql

我有一个select语句。它从数据库中选择我的所有标签。每个标记都是一个条目,因此当查询获得结果时,如果在while语句中回显,它们将以tag1tag2tag3形式出现。当我在while语句之外回显结果时,我得到了tag3。我想得到tag1,tag2,tag3作为结果。解决这个问题的最佳方式是什么?

$sql = "SELECT name FROM tags WHERE vid_id=?";
$gettags = $conn->prepare($sql);
$result=$gettags->execute(array($vid_id));
while ($row=$gettags->fetch(PDO::FETCH_ASSOC)){
$tags=$row['name'];
}
echo $tags; //produces tag3 if entries are tag1tag2tag3

4 个答案:

答案 0 :(得分:4)

$tags = array()
while ($row = ...) {
   $tags[] = $row['name'];
}
echo implode($tags);

答案 1 :(得分:2)

$sql = "SELECT name FROM tags WHERE vid_id=?";
$gettags = $conn->prepare($sql);
$result=$gettags->execute(array($vid_id));
$tags = '';
while ($row=$gettags->fetch(PDO::FETCH_ASSOC)){
   $tags .= $row['name']; //concatenate the strings
}
echo $tags; //produces tag1tag2tag3

答案 2 :(得分:2)

您每次迭代都会重新分配$tags。所以它只输出最后返回的标签。

在这种情况下构建一个数组很常见,然后使用类似implode()的函数作为输出。

$tags = array()
while ($row=$gettags->fetch(PDO::FETCH_ASSOC)){
  $tags[] = $row['name'];
}
echo implode(', ', $tags);

注意:根据上下文和数据库平台,您可以在数据库级别完全执行此操作,例如GROUP_CONCAT()

答案 3 :(得分:2)

$tags = array();
$i = 0;


while ($row=$gettags->fetch(PDO::FETCH_ASSOC)){
    $tags[$i]=$row['name'];
    $i++;
}

echo $tags;