2013-04-17 118 views
2

我有以下代碼:來自MySQL表的重複結果?

<?php 

$select = mysqli_query ($con,"SELECT field_2 FROM info4"); 
if (! $select) { 
die('Query unfunctional ' . mysqli_error($con)); 
} 
    ?> 

<table> 
<td><select name="City"> 

<?php 
while ($res=mysqli_fetch_array($select)){ 
foreach($res as $value){ 
echo "<option>" . $value . "</option>"; 
}} 
?> 
</select></td></table> 

其中$con是連接。

但是,這會輸出所有重複值的下拉菜單。例如,如果我的表中有1和2,則會輸出:1/1/2/2(在下拉列表中)。我假設我在代碼中犯了一個錯誤 - 任何人都可以看到它嗎?

在此先感謝。

+0

你應該看看使用pdo先生出mysqli –

回答

1

試試這個。在這種情況下foreach循環是不必要的。

<?php 
while ($res=mysqli_fetch_assoc($select)){ 
echo "<option>" . $res["field_2"] . "</option>"; 
} 
?> 
+0

非常感謝,它的工作!僅供將來參考:我應該在什麼情況下使用foreach循環? – tmnol

+1

您在該代碼中有過多的'}'。 –

+0

當從結果集中獲取數據時,您不必在while循環中使用foreach。 while循環的每次迭代都從表中拉出一行。然後,如果你想從一行中獲得一列,那麼你只需通過$ res [「col1」],$ res [「col2」]等等。 – user2289259

3

mysqli_fetch_array默認爲結果返回類型MYSQLI_BOTH,它返回兩者締合和非締合的值。這是爲什麼,我不知道,但它返回數組是:

$res = array(0 => '1', 'field_2' => '1'); 

您可以通過使用mysqli_fetch_assoc或指定MYSQLI_ASSOC作爲返回值解決這個問題。我的首選修復是:

while ($res = mysqli_fetch_assoc($select)) { 
    echo "<option>$res[field_2]</option>"; 
}