以下代码似乎太多了,因为获得单个计数值。 有没有更好的,推荐的方法来使用纯DBI获取单个COUNT值?
sub get_count {
my $sth = $dbh->prepare("SELECT COUNT(*) FROM table WHERE...");
$sth->execute( @params );
my $($count) = $sth->fetchrow_array;
$sth->finish;
return $count;
}
这个更短,但我还有两个陈述。
sub get_count_2 {
my $ar = $dbh->selectall_arrayref("SELECT ...", undef, @params)
return $ar->[0][0];
}
答案 0 :(得分:34)
在一行中很容易做到没有额外的变量:
$count = $dbh->selectrow_array('SELECT count(*) FROM table WHERE...', undef, @params);
答案 1 :(得分:3)
我不知道Perl,但如果它的语法是合乎逻辑的,我认为这可以根据你的第二个例子来运作:
sub get_count {
return $dbh->selectall_arrayref("SELECT ...", undef, @params)->[0][0];
}
答案 2 :(得分:1)
我可能不会自己这样做,但你总是可以把它作为你正在使用的DBH对象的一个新的顶层函数:
警告:未经测试的代码如下!
sub DBD::SQLite::db::count
{
my($dbh, $table, $where) = @_;
my($stmt) = "SELECT COUNT(*) FROM $table";
$stmt .= " WHERE $where" if $where;
my($count) = $dbh->selectrow_array($stmt);
return $count;
}
然后像这样调用它:
my($cnt) = $dbh->count('Employee', 'year_hired < 2000');
除了污染不属于您的命名空间外,您还必须为您使用的每个数据库驱动程序编写此命令,但我确信您可以使用某些功能,允许您构建和评估某些代码以自动配置此对于给定的DBH对象。