PHP的SQLSRV间歇性地失败

时间:2015-04-17 12:58:11

标签: php sql-server sqlsrv

我在Apache上使用PHP 5.5和数据库SQLSERVER 2012 Express运行系统。

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

嗯,我很确定我安装好了一切。

当我运行php脚本时,它返回输出var O.K(最后的例子)。但过了一段时间,这个剧本就失败了#34;并且不返回任何东西。不是错误消息,不是var输出,任何东西。这种情况间歇性地发生。有时是工作O.K,有时失败。

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

在脚本执行Procedure之后,我希望这会覆盖我的$ outputVar,而这个工作是O.K.问题是,有时脚本运行没有错误,但不返回任何内容,因此$ 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);

我的存储过程会返回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

1 个答案:

答案 0 :(得分:1)

如上所述,

问题是修复了我的程序“SET NOCOUNT ON”的选项,并注意程序除了我需要的结果外不要输出任何内容。