我可以在使用Zend_Db_Adapter_Pdo_Mssql时设置查询超时吗?


Can I set a query timeout when using Zend_Db_Adapter_Pdo_Mssql?

我们有一个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