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

时间:2013-05-17 03:55:36

标签: php sql-server pdo zend-db

我们有一个PHP应用程序(托管在Linux上),它使用Zend Framework组件来查询Microsoft SQL Server 2008数据库。 PHP应用程序托管在具有可靠Internet连接的数据中心,但SQL Server数据库位于VPN连接的远端,定期丢失。

我们遇到的问题是,在针对SQL Server的查询正在进行时偶尔会发生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的任何超时选项。

2 个答案:

答案 0 :(得分:3)

尝试使用PDO :: ATTR_TIMEOUT属性。我不确定pdo_dblib的默认值是什么,它可能在驱动程序之间有所不同。

答案 1 :(得分:1)

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