2017-03-13 12 views
0

最近、データベースから値を取得する機能がselectrow_arrayであると考えました。私はそれを使用しているときに次のエラーが発生しています。私はここで何が問題なのだろうと思っており、これを行うための別の方法を見つけることができませんでした。Perlでselectrow_arrayを使用して2の値を取得する

コードは次のとおりです。

my $db_connection = DBI->connect($dsn, $dbuser, $dbpassword) or die $DBI::errstr; 

my $sql_statement = "SELECT customer_id,quota FROM customer_call_quota WHERE quota>=1"; 

while (my $row = $db_connection->selectrow_array($sql_statement)) { 
    my ($cust_id, $quota) = @$row; #<---- error line 
} 

my $rc = $db_connection->disconnect ; 
return "ok"; 

エラー:

Can't use string ("value") as an ARRAY ref while "strict refs" in use at code.pl line ... 

答えて

2

2つの問題。

  • selectrow_arrayは、配列への参照を返しません。それはselectrow_arrayrefです。
  • selectrow_*は、最初の行のみを返します。

ソリューション:

# Wasteful 

my $sth = $dbh->prepare($sql_statement); 
$sth->execute(); 
while (my @row = $sth->fetchrow_array()) { 
    my ($cust_id, $quota) = @row; 
    ... 
} 

又は

my $sth = $dbh->prepare($sql_statement); 
$sth->execute(); 
while (my ($cust_id, $quota) = $sth->fetchrow_array()) { 
    ... 
} 

又は

my $sth = $dbh->prepare($sql_statement); 
$sth->execute(); 
while (my $row = $sth->fetch()) { 
    my ($cust_id, $quota) = @$row; 
    ... 
} 
+0

ああ、その最初の行だけを返します。答えをありがとう! –

+0

はい、実際には他の問題が原因でエラーが発生しています – ikegami

関連する問題