2011-03-03 51 views
0

嗨,我有這段代碼。我的perl腳本掛在@row部分的某處。我打印下一個查詢語句,它在SQL中工作。mysql,perl腳本在檢索數據時被凍結

爲什麼掛呢?

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

我發現,通過改變S和V可變抽取的順序有所不同修復我的腳本...什麼給... – Gordon 2011-03-03 20:45:15

回答

0

你似乎在你的查詢語法錯誤(VFROM,而不是V FROM)。

如果查詢失敗,沒有結果集可以從中獲取一行。您可能想要在代碼中構建一些錯誤處理。

+0

對不起,這是一個粘貼錯誤,只是爲了使我的變量通用...仍然有問題 – Gordon 2011-03-03 20:16:39

+0

原則立場,你是否檢查你g在嘗試讀取結果集之前,從該查詢得到結果? – 2011-03-03 20:18:27

+0

在執行命令處凍結。它尚未進入while循環。 – Gordon 2011-03-03 20:22:10

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;您過了一會:

    而{這裏

    //東西與行

    }(取)模具$ sth2-> errstr如果$ sth2-> ERR ;

  3. 評論CPAN DBI文檔@http://metacpan.org/pod/DBI

0

通過它更好地使用佔位符的方式:

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