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

Spa*_*ace 1 perl dbd

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

$res = $conn->prepare($query);
$res = $res->execute();
@tuple = $res->fetchrow_array;
Run Code Online (Sandbox Code Playgroud)

错误:

Can't call method "fetchrow_array" without a package or object reference at test.pl line 69.
Run Code Online (Sandbox Code Playgroud)

请建议.

Ped*_*lva 7

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

执行以前准备的声明.除了UPDATE,DELETE,INSERT语句之外,它还返回受影响的行数,execute方法也可用于SELECT ... INTO表语句.

$res最有可能包含"受影响的行"的数量.

$sth   = $conn->prepare($query);
$nrows = $sth->execute();
@tuple = $sth->fetchrow_array;
Run Code Online (Sandbox Code Playgroud)


yst*_*sth 6

你不应该这么说

$res = $res->execute();
Run Code Online (Sandbox Code Playgroud)

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

  • @Space,那你做错了,因为这是你的问题.发布修改后的代码. (4认同)