【问题标题】:Perl's SQLite3: {NAME} not working?Perl 的 SQLite3: {NAME} 不工作?
【发布时间】:2012-05-01 10:31:11
【问题描述】:

这是我正在开发的一个 sqlite 数据库应用程序中的一个 sn-p 代码:

my $query = "select * from pins";
my $sth = $dbh->prepare($query) or die "Couldn't prep: $DBI::errstr";
$sth->execute or die "Exec problem: $DBI::errstr";
my $result = $sth->fetchall_arrayref();
my $names = $sth->{NAME} or die "Name failed: $DBI::errstr";
foreach my $row (@$res) {
    # ... do some row-specific things
    foreach my $cell (@$row) {
        # ... do some cell-specific things
    }
}

查询触发得很好,实际上它返回了正确的结果。但是,由于某种原因,这条线,

my $names = $sth->{NAME} or die "Name failed: $DBI::errstr";

失败。 {NAME} 永远不会返回我期望的数组引用。如果我去掉 die 子句,它运行良好(当然,在我使用 $names 的任何地方都会抛出预期的“使用未初始化的值”警告)。

鉴于查询工作正常,我是否有一些明显的原因错过了 {NAME} 不会触发?

谢谢!

【问题讨论】:

  • 在此期间,能否请您澄清一下未启动的教育价值语句对象的“NAME”属性是做什么的?乍一看,我无法从 DBI POD 或来源中得到直接的答案。它是列名的数组引用吗? Q 和 A 均 +1
  • 在fetchall_arrayref 之后NAME 不可用的原因是该语句在获取所有行后不再活动。

标签: perl sqlite dbi


【解决方案1】:

我犯了严重的愚蠢错误。切换两行以使其成为

my $names ...
my $result ...

修复它。我想我必须在 execute() 之后(或者更确切地说,在 $sth 更改之前)直接获取 {NAME} 。我没想到 fetchall_arrayref 会擦除 {NAME}。

现在工作!对不起这个帖子。我会把它留给后代,直到有人认为它不值得这个空间。 :-)

【讨论】:

  • 既然你找到了正确的答案,那就赶紧接受吧。
猜你喜欢
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 2020-09-23
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多