2011-09-12 33 views
1

我有一個或兩個需要10分鐘才能執行的查詢。在zend中設置超時到pdo_mssql

如何操作$ 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); 
} 

回答

1

我不熟悉的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驅動程序自定義屬性。據this blog entry

開發人員可以使用設置每個連接和每個語句PDO :: SQLSRV_ATTR_QUERY_TIMEOUT查詢超時,並利用它來提供他們的應用程序更好的用戶體驗。

希望幫助,

+0

PDO :: ATTR_TIMEOUT似乎沒有影響pdo_mssql司機 – Alex

+0

@Alex:我已經重新編輯我的答案,似乎有一個PDO :: SQLSRV_ATTR_QUERY_TIMEOUT屬性。雖然沒有測試,但我希望它對你有用。 – dinopmi