Результаты PHP MySQL возвращают двойные значения

#php #mysql #html

#php #mysql #HTML

Вопрос:

У меня есть страница, которая возвращает некоторые результаты из SQL-запроса в базу данных MySQL. По какой-то причине оно возвращает каждое значение дважды, я думаю, потому что оно хранится в базе данных как с числовым индексом, так и со строковым индексом. Как я могу извлечь только индексы и значения, которые имеют строковый индекс, и игнорировать те, у которых целочисленный индекс?

Функция, которую я использую для генерации таблицы, приведена ниже:

 function SQLtable($answer) {
$result = "<table class="SQLresult">";

$row = mysql_fetch_array($answer);

//TODO check for empty table here and return a message if empty

$result .= "<tr>";
foreach (array_keys($row) AS $heading) {
$result .= "<th>$heading</th>";
}
$result .= "</tr>";

do {
$result .= "<tr>";
    foreach($row as $cell) {
    $result .= "<td>".$cell."</td>";
    }
$result .= "</tr>";

}
while ($row = mysql_fetch_array($answer));

$result .= "</table>";
return $result;
}
  

Скриншот результата:http://i.stack.imgur.com/3YXoh.png

Спасибо.

edit1 — SQL, который я использую, является чем-то вроде заполнителя для тестирования. Это:

 $query = "SELECT * FROM politicians";
  

Я также пробовал запрашивать столбцы, и я получаю ту же проблему.

 $query = "SELECT firstname,lastname,jurisdiction,party,riding FROM politicians";
  

Комментарии:

1. Можете ли вы опубликовать SQL, который вы используете для извлечения данных из вашей таблицы. Это, скорее всего, то, что нужно изменить.

Ответ №1:

mysql_fetch_array() по умолчанию возвращает хэш, который содержит как ассоциативный массив, так и обычный набор результатов с числовым ключом для вашей строки. Для извлечения одного или другого используйте mysql_fetch_row() (array) или mysql_fetch_assoc() (hash), или укажите, какой тип вы хотите, используя необязательный второй аргумент mysql_fetch_array() , как описано на его странице руководства (ссылка выше).

Это эквивалентности:

 mysql_fetch_assoc($result) -> mysql_fetch_array($result, MYSQL_ASSOC);
mysql_fetch_row($result) -> mysql_fetch_array($result, MYSQL_NUM);
mysql_fetch_array($result) -> mysql_fetch_array($result, MYSQL_BOTH);