0

我有一个很好的函数,叫做 lnk(),我已经使用了很长时间,它连接到 MySQL。最近我决定添加 mysqli_ping 调用来检查连接并在需要时重新连接,因为我遇到了一个守护进程(24/7 运行)的问题,它在长时间不活动后一直失去与 MySQL 的连接。

实施后,我开始遇到多查询问题。如果在 mysqli_multi_query 之后发送 ping,则在发送 ping 时会丢失与 MySQL 的连接,除非 mysqli_store_result 在 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 回答