PHP 的 SQLSRV 间歇性失败

SQLSRV with PHP fail intermittently

我在 Apache 上有一个 运行ning 系统 PHP 5.5 和一个数据库 SQLSERVER 2012 Express。

安装扩展 "php_sqlsrv_55_ts" 并在 php.ini 中添加扩展后,我为我的 SO (Windows 8.1) 安装了 ODBC 控制器。

好吧,我很确定我安装的一切都是正确的。

当我运行一个php脚本时,它return输出变量O.K(最后的例子)。但是过了一段时间,这个脚本 "fail" 和 return 什么都没有了。不是错误消息,不是 var 输出,任何东西。这间歇性地发生。有时工作 O.K,有时失败。

如您所见,我将默认变量 $outputVar 设置为 -1。

在脚本执行程序后,我预计这会覆盖我的 $outputVar,并且这项工作 O.K。问题是,有时脚本 运行 没有错误,但没有 return 任何东西,因此 $outputVar 永远不会被覆盖,默认值仍然是 -1.

这发生在我所有的程序中,即使是最简单的程序。

这是随机发生的。

我的 PHP 脚本。

$serverName = "xx.xx.xx.xx\SQLEXPRESS, 1433";

$connectionInfo = array(
    "Database"     => "xxxxx",
    "UID"          => "xxxxx",
    "PWD"          => "xxxxx",
    'CharacterSet' => 'UTF-8',
);

$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn) {
    echo "ok.";
} else {
    echo "error";
}

$outputVar  = 'ANDRONICO'; // this is default value.

$parameters = array(
    array($outputVar, SQLSRV_PARAM_OUT),
);

$query = '{CALL TEST_SP(?)}';

$stmt = sqlsrv_query($conn, $query, $parameters);

sqlsrv_next_result($stmt);

if ($stmt === false) {
    $errors = sqlsrv_errors();
    var_dump($errors);
}

var_dump($outputVar); // this var is overwrite by SQLSRV library.

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);

我的存储过程return一个1到1000的随机数

CREATE PROCEDURE [dbo].[test_1]
(
 @ret_cod int OUTPUT
) 
As 
BEGIN TRY

SET NOCOUNT On
SET @ret_cod = (SELECT ROUND(((999) * RAND() + 1), 0));


END TRY
BEGIN CATCH
    SET @ret_cod = (SELECT ERROR_NUMBER() AS ErrorNumber)
END CATCH

正如 sofl 所说,

问题已解决,将选项添加到我的程序 "SET NOCOUNT ON" 并注意程序,除了我需要的结果外,不要输出任何内容。