【发布时间】:2012-08-31 16:01:53
【问题描述】:
我有一个很好的函数,叫做 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 对我的连接有什么影响。
【问题讨论】:
-
您可能需要在各种调用中重复使用相同的
$link。如果mysqli_multi_query和其他人之间的连接被重置,lnk()会给你一个新的链接......这反过来又会破坏mysqli_next_result。 -
中断发生在 ping 而不是 next_result。
-
不管怎样,我认为您应该在各种函数中重复使用相同的链接值。
-
正如我所提到的,我添加了一个选项来绕过函数中的 ping。这意味着该函数只是完全按照您提到的那样返回连接。我不需要解决方案来使其工作。正如我提到的,我已经拥有它。我需要一个答案,为什么会这样。 ping 到底在做什么?
标签: php mysqli mysqli-multi-query