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

3

下面的答案很好。如果查询会返回多行数据,仍应向查询添加LIMIT 1,以便服务器避免选择和发送许多行数据回客户端。 - Tim Bunce
2个回答

10

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

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

替代方案需要执行以下步骤:准备、绑定和执行、提取结果和结束。


3
它还清楚地表明,我只期望单行结果,而无需查看“$sql”。 - Richard Huxton

4

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

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);

你怎么知道 project.id=? 会返回1行? - Jim
1
@Jim 因为在我的数据库中,id是项目表的主键。 - user4035

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接