mysql,perl脚本在检索数据时冻结

时间:2011-03-03 20:02:54

标签: mysql perl

嗨,我有这个代码。我的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 :(得分: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';
  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

答案 2 :(得分:0)

顺便说一句,最好使用占位符:

$sth2 = $dbh->prepare(qq|SELECT DISTINCT S,`W(m)`,`L(m)`,V FROM `$SQL_TABLE_NAME` WHERE DEVICE= ?| );
$sth2->execute($device);