Как исправить код ошибки сервера «Использование неинициализированного значения XX в цифре c lt (<)»? - PullRequest
0 голосов
/ 17 марта 2020

Очистка старого кода на сервере ... получение ошибки в строке 228 ... извлечение фрагмента ... while ($ i <$ num_cols) - строка с ошибкой AH01215 "Использование неинициализированного значения $ num_cols in numberri c lt (<) at "</p>

Я добавил в my и попытался проверить, не определен ли код, но я хотел бы, чтобы код работал без сообщений журнала ошибок веб-сервера.

У меня есть несколько таких ошибок «Использование неинициализированных», в надежде, что решение этой проблемы поможет мне с остальными.

            $sth = $h->prepare($sel);
            if ($sth == 0) {
                    print "<XMLRSSQLERROR>ERROR: $DBI::errstr</XMLRSSQLERROR>\n";
                    exit;
            }
            if (!$sth->execute) {
                    print "<XMLRSSQLERROR>ERROR: $DBI::errstr</XMLRSSQLERROR>\n";
                    exit;
            }

            my $num_cols = $sth->{NUM_OF_FIELDS};

            #Start the XML output
            #Start the RS section and add the table name
            print "<RS>\n";
            print "$table\n";

            #Start the SCHEMA section
            print "<SCHEMA>\n";

            my @columns = @{$sth->{NAME}};
            my @type = @{$sth->{TYPE}};

            my $i = 0;
            while ($i < $num_cols) {
                    print "<$columns[$i]>";
                    if (($type[$i] == 1)  or ($type[$i] == 12) or ($type[$i] == -1)) {
                            print "char";
                    } elsif (($type[$i] == 4) or ($type[$i] == 5) or ($type[$i] == -6)) {
                            print "int";
                    } elsif (($type[$i] == 2) or ($type[$i] == 6) or ($type[$i] == 7) or ($type[$i] == 8)) {
                            print "float";
                    } elsif (($type[$i] == 11) or ($type[$i] == 10) or ($type[$i] == 9)) {
                            print "datetime";
                    } else {
                            print "$type[$i]"
                    }
                    print "</$columns[$i]>\n";
                    $i += 1;
            }   

            #End the SCHEMA section
            print "</SCHEMA>\n";

Ответы [ 2 ]

1 голос
/ 17 марта 2020

определено или может установить значение по умолчанию:

 my $num_cols = $sth->{NUM_OF_FIELDS} // 0;

Существуют различные другие приемы, но большинство из них - это разные способы проверки значений, которые вы ожидаете перед вами. используйте их.

Но, не видя ваших SQL утверждений или не зная, какой драйвер DBI вы используете, мы не можем многое угадать. Я определенно хотел бы знать, почему это значение имеет значение undef.

0 голосов
/ 17 марта 2020

Как уже говорили другие, странно, что $sth->{NUM_OF_FIELDS} не определено. Я бы определенно хотел узнать, что там происходит.

Но мне кажется, что вам это совсем не нужно. Это только потому, что вы используете while l oop, который, вероятно, должен быть записан как foreach l oop. Вы можете удалить:

my $num_cols = $sth->{NUM_OF_FIELDS};

и заменить:

while ($i < $num_cols) {

на:

foreach my $i (0 .. $#columns) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...