我有一个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
答案 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;