嘿,我正在编写一个需要从数据库获取数据的 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)
输出:实际上什么都没有
始终使用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)
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |