我正在研究Perl的DBI,我看到了以下方法:
selectrow_array
selectrow_arrayref
selectrow_hashref
所有这些都从结果集中返回1行。所以我不明白它们的用处是什么。它们是否可以取代LIMIT 1
?
答案 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);