2 Stimmen

"Der MySQL-Server ist nach einigen Minuten verschwunden".

Ich habe 2 Tabellen in einer Abfrage, die dazu dient, die gespeicherten Suchinformationen von Benutzern anzuzeigen/zu versenden: Benutzer und Wunschliste.

Die Suchinfo enthält unter anderem Buchtitel.

Ich habe eine erste Abfrage entwickelt, um in ein Array alle Benutzer zu setzen, die Datensätze in der Tabelle Wunschliste haben.

Mit einer foreach-Schleife können Sie dann über eine zweite Abfrage jeden Buchtitel auf verschiedenen Websites suchen und diese Informationen auf dem Bildschirm oder in einer E-Mail speichern.

Beim ersten Durchlauf dauert es etwa 3 Minuten, bis die Informationen des ersten Benutzers zusammengestellt sind, und nachdem diese Informationen angezeigt wurden, sehe ich die gefürchtete Meldung "Der MySQL-Server ist verschwunden".

Nach Angaben von http://dev.mysql.com/doc/refman/5.0/en/gone-away.html - Das sollte nicht so schnell passieren.

Der Code für die zweite Abfrage ist einfach:

SELECT * FROM wishlist WHERE uid = " . $sendtouser . " ORDER BY wishid

Nachdem die Informationen für diesen Benutzer zusammengestellt wurden, muss ich die Schleife schließen und die Verbindung beenden.

} while ($row_rsWishDetails = mysql_fetch_assoc($rsWishDetails));
mysql_free_result($rsWishDetails);

Ich habe einige andere Vorschläge ausprobiert, die ich im Internet gefunden habe, darunter:

ini_set('max_execution_time', 22222);
ini_set('mysql.connect_timeout', 500);
ini_set('default_socket_timeout', 600);

Aber das Problem wird nicht gelöst.

Irgendwelche Ideen?

Herzlichen Dank.

1voto

Chris Henry Punkte 11720

Bei lang laufenden Skripten müssen Sie sich vergewissern, dass die Verbindung noch offen ist, bevor Sie eine Abfrage starten. Der beste Weg, dies zu tun, ist die Verwendung von etwas wie mysql_ping() vor Ihrer Anfrage.

Auch die mysql ist ziemlich alt und ineffizient. Sie sollten versuchen, ein Upgrade auf mysqli .

0voto

TaeL Punkte 1020

Müssen Sie TESTEN, wie viele Daten Sie empfangen können.

ob Ihr DB-Rechner alt ist oder die Anzahl der Ergebniszeilen 1000000000000000000000+ beträgt, Sie müssen Ihre Abfrage mit Paging korrigieren: Limit, Cursor, etc...

es ist keine direkte Lösung für Ihre Frage.

Überprüfen Sie zunächst die Zeilenzahl mit

SELECT COUNT(*) FROM wishlist WHERE uid = " . $sendtouser . "
  • ORDER BY ist nicht erforderlich.

Prüfen Sie, ob Sie die ORDER BY-Phrase entfernen können, und wenn ja, ordnen Sie sie mit PHP-Code neu an.

UND...

ini_set('max_execution_time', 22222);

es ist Client(PHP)-Konfiguration, wie Sie wissen, ist es nutzlos, wenn mysql-server nicht erlaubt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X