2013-10-08 38 views
0

我正在使用PDO连接到Postgresql数据库,使用PDO :: ATTR_PERSISTENT属性可显着提高应用程序的速度。如何通过PHP刷新汇集的PDO连接?

但是我在调​​试之后遇到了一个问题,发现在执行最后一个SQL查询后大约2小时11分钟,DB的连接就死掉了! 故障位于服务器之间的防火墙上,但网络人员拒绝超过24小时的限制(说它会减慢防火墙),而我需要禁用它。

我不能通过简单的用法刷新池连接,因为我无法控制或确保所有池连接都在旋转底座上服务,确保没有连接会死掉(导致在负载过后很难调试问题服务器,并且一些连接已经死亡,而其他连接仍然存在)。

那么,有没有人有任何问题的建议?除了强制网络人员为这两台特定的服务器禁用这个愚蠢的超时规则之外,如何保持池中的连接活着?

谢谢!

+0

我完全不理解这个问题。死连接有什么问题?你正在谈论的在线脚本,还是某种恶魔,永久连接到数据库? –

+0

@YourCommonSense阅读关于持续连接http://php.net/manual/en/pdo.connections.php – Marek

+0

@Marek好吧,我读过。下一步是什么?你能回答我问OP的问题吗? –

回答

-1

使用

SELECT 1 

的第一个查询,如果失败,重新连接。

+0

我不能重新连接,因为连接是由资源池给脚本的。 即使在尝试任何SQL语句之后,池也不会意识到连接已死亡 - 下一次执行仍会产生错误。 我发现没有其他方法来解决这个问题,除了重新启动Apache。 – Carmageddon

+1

如果$ con是您拥有的连接,则在捕获错误后,将其分配给$ con new PDO对象。这应该重新打开连接。我现在验证了它,但仅限于定期关闭的连接。在创建新的PDO之前,您也可以尝试$ con = null。 – Marek