为什么我得到“无法调用方法”fetchrow_array“没有包或对象引用”?

时间:2010-10-25 06:31:20

标签: perl dbd

我已经安装了DBD::Pg版本2.17.1,但在使用下面的代码时仍然出现错误

$res = $conn->prepare($query);
$res = $res->execute();
@tuple = $res->fetchrow_array;

错误:

Can't call method "fetchrow_array" without a package or object reference at test.pl line 69.

请建议。

2 个答案:

答案 0 :(得分:7)

$res不是DBI的对象实例。尝试运行ref $res:它应该返回一个空字符串。

  

执行先前准备的   声明。除了UPDATE,   DELETE,INSERT语句,为此   它总是返回的数量   受影响的行,execute方法可以   也可用于SELECT ... INTO表   语句。

您的$res最有可能包含“受影响的行数”。

$sth   = $conn->prepare($query);
$nrows = $sth->execute();
@tuple = $sth->fetchrow_array;

答案 1 :(得分:6)

你不应该说

$res = $res->execute();
在该语句之前的

$ res是在执行成功后需要用来调用fetchrow_array的语句句柄,但是上面用execute()的返回值替换它,这是成功时受影响的行数如果执行失败,则为undef。相反,如果需要,将返回值存储在单独的变量中,并在调用fetchrow_array之前检查它是否成功。