3

我正在研究 Perl 的 DBI,我看到了以下方法:
selectrow_array
selectrow_arrayref
selectrow_hashref
所有这些都从结果集中返回 1 行。所以我不明白它们的用处是什么。他们是做 a 的某种替代品LIMIT 1吗?

4

2 回答 2

10

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

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

替代方案需要:准备、绑定和执行、获取和完成。

于 2013-08-11T18:26:31.093 回答
4

是的,当您只需要选择 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);
于 2013-08-11T18:25:13.313 回答