2013-04-17 5 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 sir out Mysqli –

ответ

1

попробуйте это. foreach loop в этом случае не является обязательным.

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

Большое спасибо, это сработало! Только для справок в будущем: в каком случае я должен использовать цикл foreach? – tmnol

+1

У вас избыток '}' в этом коде. –

+0

Вам никогда не придется использовать foreach внутри цикла while при извлечении данных из набора результатов. Каждая итерация цикла 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>"; 
} 
Смежные вопросы