Thread DBI::db disconnect invalidates statement handle
(10 answers)
Opened by iche at 2012-04-26 16:31
Hallo!
Und noch eine Frage: Ich finde in meinen Errorlogfiles des Webservers diesen Eintrag. ---schnipp--- DBI::db=HASH(0x200b570)->disconnect invalidates 1 active statement handle (either destroy statement handles or call finish on them before disconnecting) at ... ---schnipp--- Weil mich das in den Wahnsinn treibt, habe ich versucht herauszubekommen, woran das liegen könnte. Ich logge sämtliche Datenbankaufrufe mit und sehe folgendes: Öffnen des $db-Handlers: DBI::db=HASH(0x200b4f8) Abfrage, die über diesen Handler läuft: DBI::db=HASH(0x200b4f8) => SELECT row FROM table Schliessen des Handlers: DBI::db=HASH(0x200b4f8) Der eigentlich Code sieht so aus und liefert genau eine Zeile im Ergebnis zurück: Code (perl): (dl
)
1 2 3 4 5 6 &mysql_connect($db) my $sqlStatement = "SELECT row FROM ... "; my $dbh = $db->prepare($sqlStatement); $dbh->execute(); my $row = $dbh->fetchrow_array(); &mysql_disconnect($db) Kommentiere ich den Codeblock aus, erscheint der kein Eintrag im Errorlogfile des Servers. Hänge ich in obigen Code an vorletzer Stelle noch ein Code (perl): (dl
)
$dbh->finish; rein, erscheinen auch keine Einträge im Logfile. Deshalb gehe ich davon aus, das obiger Code den Fehler erzeugt. Ich verstehe jetzt zwei Sachen nicht an der Sache. 1.) in der Subroutine "&mysql_disconnect" findet das hier noch statt Code (perl): (dl
)
if ($dbh) {$dbh -> finish;} Damit sollte mein obiges "finish" eigentlich überflüssig sein 2.) ist das Verwirrendste. Im Errorlog erscheint ein anderer Hashwert. Nämlich "0x200b570" statt "0x200b4f8". Das deutet eigentlich auf einen weiteren $db-Handler hin. Ich finde aber nichts, wo ich diesen erzeuge. Mir ist das völlig unklar. Habt ihr einen Tipp? Danke modedit Editiert von GwenDragon: Titel gekürzt Last edited: 2012-04-26 17:15:26 +0200 (CEST) |