我有一个只产生一行和一列的mysql查询,当以交互方式检查查询时,我可以看到结果,这就是我想要的。但是当我使用时
$sth->fetchrow_hashref;
我得到了undef。
有没有人知道这里可能有什么问题?
我感谢任何方向的任何一点。你产生你的结果。
这是在执行后直接完成的:
sub _get_next_hashref
{
my $self = shift;
if($self->{sth} ne '') {
if(my $hash_ref = $self->{sth}->fetchrow_hashref)
{
return $hash_ref;
} else {
$self->{sth} = '';
return undef;
}
} else {
return undef;
}
}
其他一些信息:
执行的查询以limit 1
结束,因此应始终只有一行。出于某种原因,数据中否则会导致更多行完美地工作,但只产生一行结果的数据不起作用。
$sql = "select sort_order from forum.metatag_sort where metatag=? order by id desc limit 1";
$self->{sth} = $self->{dbh}->prepare($sql);
if($self->{sth}->execute(@args)) {
return _get_next_hashref();
}
在@args中只有metatag,一个int。
案例在哪里
select count(sort_order) from forum.metatag_sort where metatag=?
将返回大于1的答案对我来说完美无缺,但是这种情况将完全返回1的情况失败。
答案 0 :(得分:1)
您的_get_next_hashref
- 定义看起来像是某个类的方法,但您将其称为函数:
if($self->{sth}->execute(@args)) {
return _get_next_hashref();
}
因此它没有获取对象信息,除了undef
之外它不能返回任何内容。
答案 1 :(得分:0)
您好像忘记将$sql
设置为SQL字符串:
"select sort_order from forum.metatag_sort where metatag=? order by id desc limit 1" $self->{sth} = $self->{dbh}->prepare($sql);
您使用的是strict
和warnings
吗?考虑一下:以下:
"some code";
print "bar";
use warnings
应该告诉你这一行:
在scratch.pl第5318行的void上下文中无用的常量(某些代码)。
我冒昧地为你改变了一些代码。
$self->{sth}
与任何东西进行比较。如果它中有一个语句句柄,那就是真的。如果没有,那将是假的。return
,请勿在{{1}}块中放置else
。您不需要return
。只需将其放在else
- 声明下面。if
始终返回return
。见ProhibitExplicitReturnUndef。我是这样做的:
undef