DBD::mysql::st fetchrow_hashref failed: fetch() without execute() at

20/04/2011 - 21:48 von Thomas Pries | Report spam
Hallo,

ich experimentiere zur Zeit ein wenig mit MySQL-gespeicherten Prozeduren und
Perl und stecke an einem Problem fest. Ich rufe eine gespeicherte Prozedur
auf:

...
my $st='CALL getUrlInfos();';
my $sth=$self->{dbHandle}->prepare($st);
if($sth){
if($sth->execute()){
return $sth->fetchrow_hashref();
}else{...

falls die Prozedur keinen Datensatz liefert bekomme ich obigen Fehler.
Eigentlich hàtte ich erwartet, dass ein fetch... nach einem erfolgreichen
execute() irgend etwas sinnvolles liefert. Die Prozedur an sich scheint ok,
wenn ich sie per Hand aufrufe bekomme ich "Query OK, 0 rows affected, 1
warning (0.00 sec)" (Warnung ist "No data - zero rows fetched, selected, or
processed").

Das Problem ist auch auf http://bugs.mysql.com/bug.php?idH562 beschrieben.

Als potentielle Lösung sehe ich ein SELECT 'FEHLER' im else-Zweig und Test
auf 'FEHLER' im Code, aber so richtig schön finde ich das nicht.

Hat jenamd noch eine andere Idee?

Gruß
Thomas
 

Lesen sie die antworten

#1 Peter J. Holzer
22/04/2011 - 09:58 | Warnen spam
On 2011-04-20 19:48, Thomas Pries wrote:
ich experimentiere zur Zeit ein wenig mit MySQL-gespeicherten Prozeduren und
Perl und stecke an einem Problem fest. Ich rufe eine gespeicherte Prozedur
auf:

...
my $st='CALL getUrlInfos();';
my $sth=$self->{dbHandle}->prepare($st);
if($sth){
if($sth->execute()){
return $sth->fetchrow_hashref();
}else{...

falls die Prozedur keinen Datensatz liefert bekomme ich obigen Fehler.
Eigentlich hàtte ich erwartet, dass ein fetch... nach einem erfolgreichen
execute() irgend etwas sinnvolles liefert. Die Prozedur an sich scheint ok,
wenn ich sie per Hand aufrufe bekomme ich "Query OK, 0 rows affected, 1
warning (0.00 sec)" (Warnung ist "No data - zero rows fetched, selected, or
processed").



Kann es sein, dass DBD::mysql durch die Warnung verwirrt wird?

Hat jenamd noch eine andere Idee?



subscribieren und das Problem dort schildern
(möglichst mit einem nachvollziehbaren Testcase). Der Maintainer von
DBD::mysql liest dort mit (ist allerdings ziemlich schreibfaul).

hp

Ähnliche fragen