2010-10-25 18 views
1

J'ai installé la version 2.17.1 DBD::Pg mais toujours obtenir encore une erreur tout en utilisant le code ci-dessousPourquoi j'obtiens la méthode "Can not call" "fetchrow_array" sans un paquet ou une référence d'objet "?

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

:

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

S'il vous plaît suggérer.

+0

Donnez-nous plus de code. Qu'est-ce que c'est «$ res»? – eumiro

+0

J'ai ajouté les valeurs ou $ res. s'il vous plaît laissez-moi savoir si vous avez besoin de plus de script. – Space

+0

'use strict; utiliser les avertissements; ' – Ether

Répondre

7

$res n'est pas une instance d'objet de DBI. Essayez d'exécuter ref $res: il doit retourner une chaîne vide.

Executes a previously prepared statement. In addition to UPDATE, DELETE, INSERT statements, for which it returns always the number of affected rows, the execute method can also be used for SELECT ... INTO table statements.

Votre $res contient sans doute le nombre de « lignes affectées ».

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

j'ai essayé selon votre suggestion, mais sans succès. toujours obtenir la même erreur. – Space

+0

J'ai eu une faute de frappe: '@tuple = $ res-> fetchrow_array;' devrait être '@tuple = $ sth-> fetchrow_array;' –

6

Vous ne devriez pas dire

$res = $res->execute(); 

$ res avant cette déclaration est la poignée de déclaration que vous devrez utiliser pour appeler fetchrow_array après l'exécutons réussit, mais ce qui précède est le remplacer par le renvoie la valeur de execute(), qui est le nombre de lignes affectées en cas de succès ou undef si l'exécution a échoué. Au lieu de cela, stockez cette valeur de retour dans une variable séparée si vous le souhaitez et vérifiez son succès avant d'appeler fetchrow_array.

+0

J'ai essayé selon votre suggestion, mais sans succès. – Space

+4

@ Espace, alors vous le faites mal, parce que c'est votre problème. Postez votre code révisé. – cjm