3

我们有一个 PHP 应用程序(托管在 Linux 上),它使用 Zend Framework 组件来查询 Microsoft SQL Server 2008 数据库。PHP 应用程序托管在具有可靠 Internet 连接的数据中心中,但 SQL Server 数据库位于 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 的超时选项。

4

2 回答 2

3

尝试使用 PDO::ATTR_TIMEOUT 属性。我不确定 pdo_dblib 的默认值是什么,它可能因驱动程序而异。

于 2013-05-17T06:33:20.710 回答
1

PHP 与与 MSSQL/Sybase 服务器交互的 Unix 库 FreeTDS 一起工作。

FreeTDS 是 Sybase 和 Microsoft 使用的 TDS(表格数据流)数据库客户端访问协议和相关库的开源实现。FreeTDS 支持两家供应商的所有协议版本,包括 DB-Lib、CT-Lib 和 ODBC 库。

因此必须在 freetds.conf 文件中设置超时设置。

请参阅http://freetds.schemamania.org/userguide/freetdsconf.htm

于 2013-05-30T06:43:49.197 回答