2011-06-28 55 views
1

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

回答

2

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

这是常见的在这种情况下建立一个数组,然后使用函数像implode()为输出。

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

注:根据上下文和您的数据库平台,您可能能够在数据库级别的东西完全做到这一点像GROUP_CONCAT()

+0

就是我想要的。 – Scarface

+0

有趣的Group_concat。再次感谢杰森。 – Scarface

+0

没问题。就像我说的那样,如果您只使用标签进行展示,它就可以应用。尽管如此,让数组中的所有标签对您代码的其他方面都有帮助。 –

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 
+0

嘿尼尔感谢。与阵列解决方案的答案有什么不同?是否有效率或最佳编码实践差异? – Scarface

+0

@Sfaceface我只是做你在OP上发布的内容。做一个字符串。如果你想要一个阵列使用'$标签=阵列()'和'$标签[] = $行[ '名称']'再次 – Neal

+0

感谢尼尔。 – Scarface

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

谢谢Marc,非常感谢。 – Scarface

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


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

echo $tags; 
+0

嘿mrK,为什么要打扰$ i? – Scarface

+0

@Scarface不需要,只是我的编码偏好。我通常喜欢跟踪我有多少记录供以后使用。 – mrK

+0

来跟踪数组中的记录数。使用count($ array);它会返回数组元素的计数。 – GitsD

相关问题