【问题标题】:PHP timeout running MSSQL SP运行 MSSQL SP 的 PHP 超时
【发布时间】:2014-01-03 15:43:56
【问题描述】:

我正在尝试使用 PDO 从 PHP 运行 MSSQL 存储过程。我一直这样做,但使用这个 SP 会超时。 SP 相当复杂,运行大约需要 4 分钟。

我这样称呼它:

$setDate = '2014-01-03';

$queryMain = $coreDB->prepare("exec sp_ard :runDate");
$queryMain->bindParam("runDate",$setDate);
$queryMain->execute();

$e = $queryMain->errorInfo();
$d = $queryMain->fetchAll(PDO::FETCH_ASSOC);

print_r($e);
print_r($d);

当我运行页面时,它会运行一分钟左右然后产生这个错误:

Array ( [0] => 08S01 [1] => 258 [2] => [Microsoft][SQL Server Native Client 10.0]TCP Provider: Timeout error [258]. ) 

我知道 SP 工作正常。我可以直接从 MSSQL 管理控制台运行它。从那里运行大约需要 4 分钟,但运行良好。

我正在尝试弄清楚如何从 PHP 运行它。

任何帮助都会很棒。

谢谢!

【问题讨论】:

  • 您是否在 php.ini 上占用了 4 分钟或更多时间来解决运行时脚本超时?标准是 60 秒。
  • 您是否阅读了PDO::ATTR_TIMEOUT 的文档? php.net/manual/en/pdo.setattribute.php
  • 你知道是SP完成还是超时只是连接? 4分钟是加载页面的时间。这需要是一个后台进程。

标签: php sql-server


【解决方案1】:

您应该能够使用 PDO 配置超时。

PDO::setAttribute

public bool PDO::setAttribute ( int $attribute , mixed $value )

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

【讨论】:

  • 尚不清楚这是否适用于您的方案,但MSDN documents PDO::SQLSRV_ATTR_QUERY_TIMEOUT 也适用。
  • 感谢您的帮助。我没有尝试过,但我只是这样做了,它仍然超时。不知道这是怎么回事。它快把我逼疯了。再次感谢
【解决方案2】:

如果你的问题是超时,可以使用函数set_time_limit

set_time_limit(0);

如果您将零传递给函数,则不会施加时间限制。

另外,请确保在使用后关闭所有连接。

希望对您有所帮助!

【讨论】:

  • 请注意错误来自SQL Server驱动; PHP 本身没有超时。
  • @gryphes 感谢您的帮助。我确实将时间限制设置为 0,并且我正在关闭连接。那不是问题。我认为就像阿尔瓦罗所说的那样,错误似乎主要来自 SQL 驱动程序。不知道如何解决它。再次感谢
猜你喜欢
  • 1970-01-01
  • 2019-01-11
  • 2017-06-24
  • 2016-09-26
  • 1970-01-01
  • 2020-01-28
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多