为什么我们需要返回1行的Perl DBI函数?

时间:2013-08-11 17:55:18

标签: perl dbi dbix-class

我正在研究Perl的DBI,我看到了以下方法:
selectrow_array
selectrow_arrayref
selectrow_hashref
所有这些都从结果集中返回1行。所以我不明白它们的用处是什么。它们是否可以取代LIMIT 1

2 个答案:

答案 0 :(得分:9)

有很多例子只有一行才有用,这些功能简化了搜索过程。例如,要获取结果集的计数

my $sql = "select count(*) from people where age>?";    
my ($count) = $dbh->selectrow_array($sql, undef, 42);

备选方案要求:准备,绑定&执行,获取和完成。

答案 1 :(得分:3)

是的,当你只需要选择1行时,只需要使程序更小的语法糖。正如手册所说:

  

selectrow_hashref - 此实用程序方法结合了“prepare”,“execute”和   “fetchrow_hashref”

所以,而不是写作说:

$sql = qq{
    SELECT
        project.domain,
        project.pages_to_save,
        project.pages_to_check,
        IFNULL(project.no_exact_result, 0) AS no_exact_result
    FROM
        project
    WHERE
        project.id=?
};
my $sth = $dbh->prepare($sql);
$sth->execute($project_id);
my $values_ref = $sth->fetchrow_hashref();
$sth->finish();

你可以写:

$sql = qq{
    SELECT
        project.domain,
        project.pages_to_save,
        project.pages_to_check,
        IFNULL(project.no_exact_result, 0) AS no_exact_result
    FROM
        project
    WHERE
        project.id=?
};
my $values_ref = $sth->selectrow_hashref($sql, undef, $project_id);