2014-12-27 10 views
2

Я пишу скрипт Perl, который использует DBI для подключения к базе данных MySQL. Я пытаюсь сделать fetch столбец, который является значением умножения SUM(amount, 365) в MySQL, код работает, а также в Perl код работает для SUM(amount) Мои мысли в том, что умножение выдает другой тип значения, который я не могу прочитать через мой метод. Я мог бы уйти, хотя, все еще довольно новый для Perl.MySQL muliplication output и 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 до fetch из базы данных array, arrayref и т. Д. Есть ли другой способ, который будет работать и почему?

+0

Я бы рекомендовал включение [RaiseError], который будет выдавать ошибку для каждого метода DBI, а не на ту, которые вы не забудьте проверить. 'DBI-> connect (..., {RaiseError => 1})'; – Schwern

+0

О, добрый совет, это даст конкретные ошибки? Например, с предупреждением он скажет мне, что произошла ошибка в строке 'prepare'. Будет ли 'RaiseError => 1' указать точную причину? В этом случае ошибки не было, но это просто дало мне пустой результат, и именно поэтому я думал, что Perl не смог прочитать результат. Я тоже могу читать дальше – nzaleski

+0

Странно, что казнь не умерла. RaiseError предоставит вам такое же сообщение об ошибке, как [$ DBI :: errstr] (https://metacpan.org/pod/DBI#errstr), которое будет представлять собой сообщение об ошибке из MySQL. Это должно быть что-то вроде 'prepare failed: near") ". – Schwern

ответ

1

У вас есть избыточные закрывающая скобка ()) в запросе после «365»:

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

oh wow вы правы .. клянусь, я был на это какое-то время ... спасибо – nzaleski

+0

Мне нужен был дополнительный кронштейн SUM ((сумма) * 365) – nzaleski

Смежные вопросы