我在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
答案 0 :(得分:1)
如上所述,
问题是修复了我的程序“SET NOCOUNT ON”的选项,并注意程序除了我需要的结果外不要输出任何内容。