MySQL, Perl-скрипт зависает при получении данных - PullRequest
0 голосов
/ 03 марта 2011

Привет, у меня есть этот код.мои perl-скрипты зависают где-то в разделе @row.Я напечатал следующую инструкцию запроса, и она работает в SQL.

Почему он висит?

foreach $device (...)

        $sth2 = $dbh->prepare(qq|SELECT DISTINCT S,`W(m)`,`L(m)`,V FROM `$SQL_TABLE_NAME` WHERE DEVICE='$device'| );
        $sth2->execute(  );
        my %TEMP = ();
        while ( my @row = $sth2->fetchrow_array(  )) 
        {
            $TEMP{S}{$row[0]} = 1;
            $TEMP{W}{$row[1]}       = 1;
            $TEMP{L}{$row[2]}       = 1;
            $TEMP{V}{$row[3]}     = 1;

        }

Ответы [ 3 ]

0 голосов
/ 04 марта 2011
my $select_line = qq|SELECT DISTINCT S,`W(m)`,`L(m)`,V 
 FROM `$SQL_TABLE_NAME` 
 WHERE DEVICE='$device'|;

Вы пытались напечатать $ select_line и затем запустить его непосредственно в MySQL?

my $sth2 = $dbh->prepare( $select_line ) 
 or die $DBI::errstr.' at my query: $select_line\n';
  1. Добавьте or die $DBI::errstr.' at my query: $select_line', чтобы проверить правильность синтаксиса.
  2. Добавьте die $sth2->errstr if $sth2->err; через некоторое время:

    while (fetch) {

    // заполнить строками

    } die $ sth2-> errstr if $ sth2-> err;

  3. Просмотр документов CPAN DBI @ http://metacpan.org/pod/DBI

0 голосов
/ 07 мая 2014

Кстати, лучше использовать заполнители:

$sth2 = $dbh->prepare(qq|SELECT DISTINCT S,`W(m)`,`L(m)`,V FROM `$SQL_TABLE_NAME` WHERE DEVICE= ?| );
$sth2->execute($device);
0 голосов
/ 03 марта 2011

В вашем запросе, похоже, есть синтаксическая ошибка (VFROM вместо V FROM).

Если запрос не удался, нет набора результатов для извлечения строки из. Возможно, вы захотите встроить некоторую обработку ошибок в ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...