我们有一个PHP应用程序(托管在Linux上),它使用Zend Framework组件来查询Microsoft SQL Server 2008数据库。PHP应用程序托管在具有可靠internet连接的数据中心中,但SQL Server数据库位于VPN连接的远端,VPN连接会定期断开。
我们遇到的问题是,当对SQL服务器的查询正在进行时,偶尔会发生VPN退出。当发生这种情况时,我们的应用程序可以等待长达2小时,然后最终引发以下异常:
SQLSTATE[HY000]: General error: 20004 Read from the server failed [20004] (severity 9) [(null)]
我想做的是将查询超时和/或读取超时设置为大约2-3分钟,这样应用程序可以更早地获得异常,并且可以从异常中恢复,而不会阻塞2小时。
我们正在使用pdo_dblib扩展连接到SQL Server,我已经通过php.net文档,我找不到任何超时选项要么为php.ini的连接
尝试使用PDO::ATTR_TIMEOUT属性。我不确定pdo_dblib的默认值是什么,它可能在驱动程序之间不同。
PHP与Unix库FreeTDS一起工作,该库与MSSQL/Sybase服务器交互。
FreeTDS是Sybase和Microsoft使用的TDS (Tabular DataStream)数据库客户端访问协议和相关库的开源实现。FreeTDS支持两家供应商提供的所有版本的协议,并包括DB-Lib、CT-Lib和ODBC库。
超时设置必须在freetds.conf文件中设置。
请参阅http://freetds.schemamania.org/userguide/freetdsconf.htm