Почему я получаю "Не могу вызвать метод" fetchrow_array "без ссылки на пакет или объект"? - PullRequest
1 голос
/ 25 октября 2010

Я установил 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 ]

7 голосов
/ 25 октября 2010

$res не является экземпляром объекта DBI.Попробуйте запустить ref $res: он должен вернуть пустую строку.

Выполняет ранее подготовленный оператор.В дополнение к операторам UPDATE, DELETE, INSERT, для которых он всегда возвращает количество затронутых строк, метод execute также можно использовать для операторов таблицы SELECT ... INTO.

Ваш $resскорее всего, содержит количество «затронутых строк».

$sth   = $conn->prepare($query);
$nrows = $sth->execute();
@tuple = $sth->fetchrow_array;
6 голосов
/ 25 октября 2010

Вы не должны произносить

$res = $res->execute();

$ res, прежде чем этот оператор является дескриптором оператора, который вам нужно будет использовать для вызова fetchrow_array после успешного выполнения, но в приведенном выше примере его заменяют возвращаемымof execute (), это число строк, на которые повлияло в случае успеха, или undef, если выполнить не удалось.Вместо этого сохраните это возвращаемое значение в отдельной переменной, если необходимо, и проверьте его на предмет успешности, прежде чем вызывать fetchrow_array.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...