Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

fetchrow_hashref macht nicht was ich will





Frage

Tech Daten: [i]Win XP Prof + Apache 2.0.47 + MySQL 4.0.14 + PHP 4.3.3 + PEAR + Perl 5.8.0[/i] Das Problem: Ich generire mit Perl ein Cooky was ich in der Datenbank ablege. Das klappt auch ganz gut, aber wenn ich es wieder aufrufe kommt das in der Apache error.log: [B]DBD::mysql::st fetchrow_hashref failed: fetch() without execute() at F:/../../../routines.pl line 307. , referer: http://localhost/../../login.cgi[/B] Der betreffende abschnitt in meinem Script: 306 [b]$sthcg->execute;[/B] 307 [b]$resultcg=$sthcg->fetchrow_hashref;[/B] 308 [b]$sthcg->finish;[/B] Ich hoffe jemand von euch kann mir sagen was ich da falsch gemacht habe. Mit bestem Dank im voras Nappi

Antwort 1 von semi

Klappt die Verbindung zur Datenbank?
Wie sieht die Abfrage aus?

Versuche es mit dem zusätzlichen Parameter 'RaiseError', vielleicht erfährst Du dann mehr über die Fehlerquelle.
(Hier ein Beispiel, nach dem keiner gefragt hat :-) )

use DBI();
my $dbh = DBI->connect(
  "DBI:mysql:database=DBName;host=localhost", 
  "USER", "PASSWD", {'RaiseError' => 1}
);
my $sth = $dbh->prepare("SELECT * FROM TABELLE");
$sth->execute();
while(my $ref = $sth->fetchrow_hashref()) {
  print ".... $ref->{'FELDNAME1'} ..."; 
  print ".... $ref->{'FELDNAME2'} ..."; 
}
$sth->finish(); 
$dbh->disconnect();

Gruß,
Michael

Antwort 2 von Nappi

Danke für den Tipp und auch für das Script! leider hat mich das auch nicht weiter gebracht :(

Mal zum durchsehen setze ich den Teil der routines.pl hier rein vll steckt ja da das Problem und ich sehe es nur nicht.

sub gencookie {
local($un) = getuser($_[0]);
local($rid) = int(rand(5) * 9234.27);
$rid = crypt($rid, "mS");
local($salt) = chop($rid); $salt=$salt.chop($rid);
local($rid) = int(rand(1) * 10000000);
$rid = crypt($rid, $salt);
$dbhcg=DBI->connect("DBI:mysql:database=$dbname;hostname=$dbhost", $dbuser, $dbpass, {RaiseError=>1});
local($time) = time();
$sthcg=$dbhcg->prepare("DELETE FROM tbl_Cookies WHERE UID=\"$_[0]\"");
$sthcg->execute;
$sthcg=$dbhcg->prepare("INSERT INTO tbl_Cookies values(\"$_[0]\", \"$un\", \"$rid\", \"$time\")");
$sthcg->execute;
$resultcg=$sthcg->fetchrow_hashref;
$sthcg->finish;
$dbhcg->disconnect;
modlastlogon($_[0]);
return $rid;
}


Wäre toll wenn mir jemand sagen könnte wo das prob liegt! Ich sehe den Walt vor lauter Bäumen nicht mehr.

Nappi


Antwort 3 von semi

Scheitern die Abfragen nicht zufällig an doppelten Anführungszeichen? (siehe UID=\"...\")
Klartext: statt UID="wasauchimmer" lieber UID='wasauchimmer', dasselbe bei values(...)

Außerdem fehlt nach dem ersten
$sthcg->execute ein $sthcg->finish.



Antwort 4 von Nappi

So nachdem ich mich jetzt doch ein bischen von dem ganzen vern gehalten hatte wollte ich dem Fehler nun wider an die Pelle! Aber das hatte ich mir nur so gedacht!!

Semi - danke für den Tip aber das ist es leider auch nicht gewesen.

hat sonst noch jemand eine Idee? oder muss ich wirklich das ganze neu schreiben?

Nappi

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Suche in allen vorhandenen Beiträgen: