2

保存されたユーザーの検索情報を表示/電子メールで送信するように設計されたクエリに、ユーザーとウィッシュリストの2つのテーブルがあります。

検索情報には、特に本のタイトルが含まれています。

ウィッシュリストテーブルにレコードを持つすべてのユーザーを配列に入れるように設計された最初のクエリがあります。

次に、foreachループを使用して、2番目のクエリを介して、各本のタイトルを取得し、さまざまなサイトで検索を実行して、その情報を画面または電子メールに保存します。

最初の実行では、最初のユーザーの情報が収集されるまでに約3分かかりますが、この情報が表示された後、恐ろしい「MySQLサーバーがなくなった」ことがわかります。

http://dev.mysql.com/doc/refman/5.0/en/gone-away.htmlによると、これはそれほど迅速に行われるべきではありません。

2番目のクエリのコードは単純です:

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

そのユーザーの情報がコンパイルされたら、ループを閉じて接続を終了するために次のようにします。

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

私はウェブ上で見つけた他のいくつかの提案を試しました:

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

しかし、何も問題を解決していません。

何か案は?

どうもありがとう。

4

2 に答える 2

1

長時間実行されるスクリプトでは、クエリを実行する前に、接続がまだ開いていることを確認する必要があります。そのための最良の方法はmysql_ping()、クエリの前のようなものを使用することです。

また、mysqlはかなり古く、非効率的です。にアップグレードしてみてくださいmysqli

于 2012-07-11T01:17:05.220 に答える
0

受信できるデータの数をテストする必要があります。

DBマシンが古いか、結果の行数が1000000000000000000000+であるかにかかわらず、ページング(制限、カーソルなど)を使用してクエリを修正する必要があります。

それはあなたの質問に対する直接的な解決策ではありません。

まず、行数を確認します

SELECT COUNT(*) FROM wishlist WHERE uid = " . $sendtouser . "
  • ORDERBYは必要ありません。

ORDER BYフレーズを削除し、OKの場合は、PHPコードで再配置します。時々それは役に立つかもしれません。

と...

ini_set('max_execution_time', 22222);

ご存知のように、これはclient(PHP)構成であり、mysql-serverが許可されていない場合は役に立ちません。

于 2012-07-11T01:39:25.380 に答える