mysqli_ping打破了mysqli_multi_query

时间:2012-08-31 16:01:53

标签: php mysqli mysqli-multi-query

我有一个很好的函数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对我的连接的影响。

1 个答案:

答案 0 :(得分: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);
}