Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php调用的SqlServer存储过程不';无法正确返回整数输出_Php_Sql Server_Sql Server 2008_Stored Procedures_Output - Fatal编程技术网

从php调用的SqlServer存储过程不';无法正确返回整数输出

从php调用的SqlServer存储过程不';无法正确返回整数输出,php,sql-server,sql-server-2008,stored-procedures,output,Php,Sql Server,Sql Server 2008,Stored Procedures,Output,我正在尝试使用php mssql函数从SQL server 2008数据库的存储过程中捕获输出。代码运行时没有错误,但是我得到了一个奇怪的vlaue,它返回了我的一个输出参数 存储过程代码: CREATE PROCEDURE [dbo].[check_barcode_and_return] @Barcode nvarchar(20), @IsInDatabase int OUTPUT, @Product_Info nvarchar(100) OUTPUT AS SE

我正在尝试使用php mssql函数从SQL server 2008数据库的存储过程中捕获输出。代码运行时没有错误,但是我得到了一个奇怪的vlaue,它返回了我的一个输出参数

存储过程代码:

CREATE PROCEDURE [dbo].[check_barcode_and_return]
    @Barcode nvarchar(20),
    @IsInDatabase int OUTPUT,
    @Product_Info nvarchar(100) OUTPUT

AS
  SELECT @IsInDatabase = COUNT(*) FROM dbo.product_info WHERE barcode = @Barcode

  DECLARE @Brand varchar(45)
  SET @Brand = (SELECT brand FROM dbo.product_info WHERE barcode = @Barcode)
  DECLARE @Description varchar(50)
  SET @Description = (SELECT product_desc FROM dbo.product_info WHERE barcode = @Barcode) 
  SELECT @Product_Info = @Brand + '_' + @Description
RETURN 

GO
下面是调用它的php代码:

<?php
  // use a barcode known to be present in database
  $barcode_yes = '11335577';
  // use a sbarcode known NOT to be in database
  $barcode_no = '0011223344';
  $host = '00.000.000.000';
  $db = 'dbName';
  $user = 'username';
  $password = 'password';
  $barcodeInDB = 0;
  $productInfo = "";
  try {
    $conn = mssql_connect($host, $user, $password);
    mssql_select_db($db, $conn);
    $stmt = mssql_init('check_barcode_and_return', $conn);
    mssql_bind($stmt, '@Barcode', $barcode_yes, SQLVARCHAR, false, false, 20);
    mssql_bind($stmt, '@IsInDatabase', $barcodeInDB, SQLINT1, true, false, 1);
    mssql_bind($stmt, '@Product_Info', $productInfo, SQLVARCHAR, true, false, 100);
    mssql_execute($stmt, true);
    echo 'positive test results:'."\n";
    echo 'output $barcodeInDB = '.$barcodeInDB."\n";
    echo '$productInfo = '.$sampleInfo."\n";

    //reset for next call
    mssql_free_statement($stmt);
    $barcodeInDB = 0;
    $productInfo = "";

    $stmt = mssql_init('check_barcode_and_return', $conn);
    mssql_bind($stmt, '@Barcode', $barcode_no, SQLVARCHAR, false, false, 20);
    mssql_bind($stmt, '@IsInDatabase', $barcodeInDB, SQLINT1, true, false, 1);
    mssql_bind($stmt, '@Product_Info', $productInfo, SQLVARCHAR, true, false, 100);
    mssql_execute($stmt, true);
    echo 'negative test results:'."\n";
    echo 'output $barcodeInTable = '.$barcodeInDB."\n";
    echo '$productInfo = '.$productInfo."\n";

    mssql_close($conn);
  } 
  catch (Exception $e) {
    echo $e->getMessage();
  }
?>
如果直接使用SQL Server Management Studio运行存储过程,输入上面使用的条形码,则阳性测试得到@BarcodeInDB=1,阴性测试得到@BarcodeInDB=0

代码位于运行带有php5.3.10的Ubuntu的Linux服务器上


我需要更改什么才能获得整数输出参数的正确值

中的整数数据类型需要将输出参数绑定为SQLINT4,因为T-SQL整数变量显然是4字节整数。尝试将它们强制为容量较小的数据类型(即SQLINT1、SQLINT2或SQLBIT)会导致不可预测的输出

所以,我改成

...
mssql_bind($stmt, '@IsInDatabase', $barcodeInDB, SQLINT4, true);
...

它工作得很好。

您是否有机会在网页上运行它并检查结果?如果该网页显示正确的输出,则可能与php5/cli文件夹中的php.ini文件有关。谢谢您的建议。只是试了一下,结果还是一样的
...
mssql_bind($stmt, '@IsInDatabase', $barcodeInDB, SQLINT4, true);
...