Как мне обработать различное количество элементов из запроса к базе данных? - PullRequest
0 голосов
/ 23 февраля 2009

Эффективно дубликат: Как я могу отображать данные в таблице с Perl

Принятый ответ там применяется здесь. Так что сделайте некоторые из альтернатив.


Я пытаюсь выполнить необработанные запросы к базе данных из программы Perl и отобразить результаты для пользователя. Что-то вроде select * from table. Я хочу отобразить информацию в таблице HTML. Столбцы в таблице HTML соответствуют возвращенным столбцам.

У меня есть некоторые проблемы. Я могу выполнить запрос describe table, чтобы получить количество столбцов в таблице. Однако как я буду хранить информацию из возвращенных результатов в массивах?

Итак, если я сохраняю результаты, подобные этому:

while (($f1, $t2, $n3, $k4, $d5, $e6) = $sth1->fetchrow_array)

В этом случае я знаю только, что есть, скажем, четыре столбца (которые я получил из таблицы описания). Но этот номер четыре является динамическим и может меняться в зависимости от имени таблицы. Я не могу объявить свои переменные на основе этого числа. Есть предложения?

Ответы [ 3 ]

4 голосов
/ 23 февраля 2009

Попробуйте:

print "<table>\n";

# display HTML header
@cols = @{$sth->{NAMES_uc}};
print "<tr>".join("", map { "<th>${_}</th>" } @cols)."</tr>\n";

# display one HTML table row for each DB row
while (my @row = $sth->fetchrow_array) {
  print "<tr>".join("", map { "<td>${_}</td>" } @row)."</tr>\n";
}
print "</table>\n";
2 голосов
/ 23 февраля 2009

Используйте технику, предложенную в ответе (-ях) на другой вопрос - используйте fetchrow_array для извлечения в массив:

while (my @row = $sth->fetchrow_array())
{
    ...process array...
}

Или используйте альтернативу fetchrow_array(), например fetchrow_hashref().

2 голосов
/ 23 февраля 2009
while (my @row = $sth->fetchrow_array)
{
        print "<tr>".join("", map{ "<td>${_}</td>" } @row)."</tr>"  ;
}
...