0

MySQLに接続する非常に長い間使用しているlnk()という素晴らしい関数があります。最近、mysqli_ping呼び出しを追加して接続を確認し、必要に応じて再接続することにしました。デーモン(24時間年中無休で実行)で問題が発生し、長期間非アクティブになった後もMySQLへの接続が失われ続けたためです。

実装後、複数のクエリで問題が発生し始めました。MySQLへの接続は、mysqli_store_resultがpingの前に来ない限り、mysqli_multi_queryの後に送信された場合、pingが送信された時点で失われます。

$mq = mysqli_multi_query(lnk(), "SHOW PROCESSLIST;");
mysqli_next_result(lnk());
$result = mysqli_store_result(lnk());
while($row = mysqli_fetch_row($result)) {
  print_r($row);
}

なぜこれが起こっているのか考えはありますか?

このような場合に接続チェックを無視するために、ライブラリに変数を追加することを提案しないでください。私はすでにそれについて考えました、そしてそれは十分ではありません。なぜこれが起こっているのか、そしてこの場合、pingが私の接続に何をするのかを正確に知る必要があります。

4

1 に答える 1

1

カバーの下に:

...これは結果を削除するように見えます。

これは、(を呼び出す前に)一度だけ再接続する必要があることを意味しますmulti_query。このようなもの:

$link = lnk(); //once
$mq = mysqli_multi_query($link, "SHOW PROCESSLIST;");
mysqli_next_result($link);
$result = mysqli_store_result($link);
while($row = mysqli_fetch_row($result)) {
  print_r($row);
}
于 2012-08-31T16:44:00.710 に答える