2011-06-28 58 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

相關問題