在zend中设置pdo_mssql超时时间


Setting a timeout to pdo_mssql in zend

我有一个或两个查询需要大约10分钟来执行。

如何操作$db对象来包含超时?

$_SESSION['params'] = array(
 'host'           => '127.0.0.1',
 'username'       => 'sa',
 'password'       => 'password',
 'dbname'         => 'schema',
 'driver_options'        => $options
);
$db = createConnection($_SESSION['params']);
function createConnection( $params){
    return Zend_Db::factory('Pdo_MSsql', $params);
}

我不熟悉PDO_MSSQL适配器,但是根据文档,您可以使用driver_options参数向适配器添加特定选项。参见http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.connecting.parameters

中的示例#7

如果有一个PDO_MSSQL参数来设置超时,你应该可以在那里设置它。

编辑:

似乎有一个PDO::ATTR_TIMEOUT属性。根据PHP文档:

PDO::ATTR_TIMEOUT:以秒为单位的超时时间。并非所有驱动程序都支持此选项,并且其含义可能因驱动程序而异。例如,sqlite在放弃获取可写锁之前会等待这个时间值,但其他驱动程序可能会将其解释为连接或读超时间隔。需要int。

EDIT2:

似乎有一个pdo_mssql驱动程序的自定义属性。根据这个博客条目:

开发人员可以使用PDO::SQLSRV_ATTR_QUERY_TIMEOUT为每个连接和每个语句设置查询超时,并利用它在应用程序中提供更好的用户体验。

希望有帮助,