2009-10-28 62 views
0

我正在運行PHP腳本從命令行對SQL Server 2005使用MS驅動程序的PHP和獲取超時。查詢大約需要2分鐘從SQL Server Management Studio中返回> 300,000行。對SQL Server 2005的PHP是超時

有腳本多個查詢,併爲每一個我做了sqlsrv_connect(),執行查詢,然後sqlsrv_free_stmt()sqlsrv_errors():sqlsrv_close()

輸出

Array 
(
    [0] => Array 
     (
      [0] => 08S01 
      [SQLSTATE] => 08S01 
      [1] => 258 
      [code] => 258 
      [2] => [Microsoft][SQL Native Client]Shared Memory Provider: Timeout error [258]. 
      [message] => [Microsoft][SQL Native Client]Shared Memory Provider: Timeout error [258]. 
     ) 
    [1] => Array 
     (
      [0] => 08S01 
      [SQLSTATE] => 08S01 
      [1] => 258 
      [code] => 258 
      [2] => [Microsoft][SQL Native Client]Communication link failure 
      [message] => [Microsoft][SQL Native Client]Communication link failure 
     ) 
    [2] => Array 
     (
      [0] => 08S01 
      [SQLSTATE] => 08S01 
      [1] => 0 
      [code] => 0 
      [2] => [Microsoft][SQL Native Client]Communication link failure 
      [message] => [Microsoft][SQL Native Client]Communication link failure 
     ) 
) 

回答

1

我從來沒有得到太多的運氣讓SQL Server 2005和PHP使用微軟驅動程序進行交談,但它與PDO's ODBC driver很好地工作。這可能值得嘗試。

連接簡單:

$host  = '1.2.3.4'; 
$port  = '1433'; 
$database = 'MyDatabase'; 
$user  = 'MyDatabaseUser'; 
$password = 'MyDatabasePassword'; 

$dsn = "odbc:DRIVER={SQL Server};SERVER=$server,$port;DATABASE=$database"; 

try { 
    // connect 
    $conn = new PDO($dsn,$user,$password); 
} catch (PDOException $e) { 
    // fancy error handling 
} 
+0

我搬到PDO爲SQL Server,Oracle和ODBC(爲Teradata連接)。 我只有兩個問題: 用於PHP的MS SQL Server驅動程序用於返回受查詢影響的行(通過在表加載前後執行count(*)來解決此問題) PDO與Teradata的ODBC連接varchar字段大於400字節會返回一個空字符串,並且查詢後面的所有字段也會被清空。我認爲這是一個顯然固定的舊bug,但我升級到PHP 5.3.1並仍然遇到它。解決方法是將所有更長的varchar字段轉換爲更短的長度。 – Zan 2010-03-16 00:22:39

0

的事情,我能想到的夫婦。

在數據庫服務器上,您是否設置了MS SQL以允許遠程連接?如果沒有,你需要這樣做。

其次是你使用命名管道或TCP/IP?

+0

遠程連接啓用和我們使用的是TCP/IP – Zan 2009-10-28 04:11:18