Привет, у меня есть этот код. мои скрипты 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;
}
Кстати, лучше использовать заполнители:
$sth2 = $dbh->prepare(qq|SELECT DISTINCT S,`W(m)`,`L(m)`,V FROM `$SQL_TABLE_NAME` WHERE DEVICE= ?| );
$sth2->execute($device);
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';
or die $DBI::errstr.' at my query: $select_line'
, чтобы проверить правильность вашего синтаксиса.Добавьте в die $sth2->errstr if $sth2->err;
после вашего времени:
while (fetch) {
//материал здесь с строками
} die $sth2- > errstr, если $sth2- > err;
Обзор CPAN DBI docs @http://metacpan.org/pod/DBI
У вас, похоже, есть синтаксическая ошибка в запросе (VFROM
, а не V FROM
).
Если запрос завершился неудачно, нет результата для извлечения строки из. Возможно, вы захотите создать некоторую обработку ошибок в своем коде.