嗨,我有这个代码。我的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;
}
答案 0 :(得分:0)
您的查询中似乎存在语法错误(VFROM
而不是V FROM
)。
如果查询失败,则没有结果集来从中获取行。您可能希望在代码中构建一些错误处理。
答案 1 :(得分:0)
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 if $ sth2-> err;
查看CPAN DBI文档@ http://metacpan.org/pod/DBI
答案 2 :(得分:0)
顺便说一句,最好使用占位符:
$sth2 = $dbh->prepare(qq|SELECT DISTINCT S,`W(m)`,`L(m)`,V FROM `$SQL_TABLE_NAME` WHERE DEVICE= ?| );
$sth2->execute($device);