Perl fetchrow_array 返回一个空数组

0 perl dbi

嘿,我正在编写一个需要从数据库获取数据的 perl 脚本。但是当我得到一个返回值时,它会返回到一个数组中,所以我取消引用它。但它仍然什么也没打印出来。我在 sqlplus 中运行了该命令,它在那里工作没有问题。我不知道如何解决这个问题

代码:

my $sth = $dbh->prepare("select XMLRECORD from F_COMPANY") or
            die "Couldnt prepare statement: " . $dbh->errstr;

$sth->execute();

# loop through the returned data 
while( my ($row) = $sth->fetchrow_array()){
   print "@$row\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:实际上什么都没有

也尝试过这样的

ike*_*ami 5

始终使用use strict; use warnings;. 它会发现你的错误。

fetchrow_array不返回数组引用。它将行的值作为单独的标量返回。

你要

while ( my $row = $sth->fetchrow_arrayref() ) {  # aka `->fetch`
   say "@$row";
}
Run Code Online (Sandbox Code Playgroud)

或者

while ( my @row = $sth->fetchrow_array() ) {
   say "@row";
}
Run Code Online (Sandbox Code Playgroud)
use strict;
use warnings;
use feature qw( say );

use DBI;

my $dbh = DBI->connect(
   "dbi:SQLite:dbname=:memory:",
   "", "",
   {
      AutoCommit => 1,
      RaiseError => 1,
      PrintError => 0,
      PrintWarn  => 1,
   }
);

$dbh->do( "CREATE TEMPORARY TABLE `Table` ( `a` INT, `b` INT )" );
$dbh->do( "INSERT INTO `Table` VALUES ( 123, 456 )" );

{
   my $sth = $dbh->prepare( "SELECT * FROM `Table`" );
   $sth->execute();
   while ( my $row = $sth->fetchrow_arrayref() ) {  # aka `->fetch`
      say "@$row";
   }
}

{
   my $sth = $dbh->prepare( "SELECT * FROM `Table`" );
   $sth->execute();
   while ( my @row = $sth->fetchrow_array() ) {
      say "@row";
   }
}
Run Code Online (Sandbox Code Playgroud)

输出:

123 456
123 456
Run Code Online (Sandbox Code Playgroud)