2009-10-28 64 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