2014-12-27 105 views
2

我在寫一個使用DBI連接到MySQL數據庫的Perl腳本。我正在嘗試fetch一列,它是MySQL代碼中的乘法值SUM(amount, 365)的工作方式,也是在Perl中,代碼適用於SUM(amount)我的想法是,乘法運算出的是不同類型的值,我無法通讀我的方法。儘管如此,我對Perl仍然很陌生。MySQL多重輸出和Perl DBI

這裏是代碼

my ($sum, $sum365); 

$sth = $dbh->prepare (" 
    SELECT SUM(amount), SUM(amount) * 365) 
    FROM spending 
    "); 

$sth->execute() 
    or die "cannot execute\n"; 

$sth->bind_col(1, \$sum); 
$sth->bind_col(2, \$sum365); 


while ($sth->fetch){ 
    print "$sum\n"; 
    print "$sum365\n"; 
} 

另一種解決辦法我想到的,是有辦法有Perl讀取該值作爲數字?然後我可以創建另一個變量$sum365 = $sum * 365。我也試過,但Perl並沒有將數值讀爲數值。

另外我知道Perl中有不同的方法從從數據庫array,arrayref等有沒有其他的方法,將工作,爲什麼?

+0

我會建議打開[RAISEERROR]這將拋出一個錯誤,每DBI方法,而不是那些你記得檢查一下。 'DBI-> connect(...,{RaiseError => 1})'; – Schwern

+0

哦,很好的建議,會給出具體的錯誤嗎?例如警告它會告訴我,在「準備」這一行有錯誤。 'RaiseError => 1'會給出確切的原因嗎​​?在這種情況下,沒有任何錯誤,只是給了我一個空白的輸出,這就是爲什麼我認爲Perl不能讀取輸出。我可以更多地閱讀它 – nzaleski

+0

奇怪的是執行沒有死。 RaiseError會給出與[$ DBI :: errstr](https://metacpan.org/pod/DBI#errstr)相同的錯誤消息,這將是任何來自MySQL的錯誤消息。它應該像「準備失敗:靠近」)「'。 – Schwern

回答

1

您的查詢冗餘右括號())「365」之後:

$sth = $dbh->prepare (" 
    SELECT SUM(amount), SUM(amount) * 365 
    FROM spending 
"); 
+0

哦哇你是對的..發誓我在它的一段時間...謝謝 – nzaleski

+0

我需要一個額外的括號和((金額)* 365) – nzaleski