Philipp Hasenfratz: Speicher-/Timeoutproblem

Beitrag lesen

Halihallo Harry

Wie muß jetzt meine Schleife aussehen?

Genau so, wie sie jetzt aussieht. Vorausgesetzt sie funktionierte
vorher.

Derzeit bekomme ich einen Fehler:
DBD::mysql::st execute failed: Commands out of sync;  You can't run this command now at.....

http://dev.mysql.com/doc/mysql/de/commands-out-of-sync.html

$sth immer mit $sth->finish() beenden, bevor eine neue Abfrage ge-
startet wird.

Aufgrund des Fehlers gehe ich davon aus, dass du in der While-
Schleife noch andere Queries in der Datenbank absetzt...

Das Problem ist, dass mysql nur einen Server-Cache pro
Verbindungskennung anlegt. Sprich: Es kann zur selben Zeit nur einen
mysql_use_result-Query bearbeitet werden und dieser schliesst IMO
sogar mysql_store_result-Queries aus.

Die Lösung:
Entweder du kannst den Programmfluss so abändern, dass nur ein
aktives Statement zur selben Zeit bearbeitet wird.
Oder du öffnest eine zweite Verbindung zur Datenbank
(my $dbh2=DBI->connect(...)) und setzt dort die Queries innerhalb
der while-Schleife ab.

Also:

my $dbh = DBI->connect(...);
my $dbh2= DBI->connect(...);

my $sth = $dbh->prepare(..., { mysql_use_result => 1 });
$sth->execute();
while ( my @row = $sth->fetchrow_array() ) {
    # do sth with @row
    my $sth2 = $dbh2->prepare('other_query');
    $sth2->execute();
}

while (@hitdata = $hits->fetchrow_array)
muß ich jetzt anders machen, oder?

Nein.

Viele Grüsse

Philipp