2014-10-28 79 views
0

我想捕獲從SQL存儲過程中使用PHP mssql函數的SQL服務器2008數據庫。該代碼運行iwthout錯誤,但我得到一個奇怪的vlaue返回我的輸出參數之一。從PHP調用的SqlServer存儲過程不會正確返回整數輸出

存儲過程代碼:

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(); 
    } 
?> 

當運行此命令行,這是結果:

positive test results: 
output $barcodeInDB = 968529665 
$productInfo = Heinz_tomato ketchup 
negative test results: 
output $barcodeInTable = 968529664 
$productInfo = _ 

如果我直接使用SQL Server Management Studio運行存儲過程,輸入使用的條碼bove,我得到@BarcodeInDB = 1爲正面測試,@BarcodeInDB = 0爲負面測試。

該代碼位於運行的Linux服務器上Ubuntu與php5.3.10

我需要改變什麼才能獲得整數輸出參數的正確值?

+0

你有沒有可能在網頁上運行它並檢查結果?如果網頁顯示正確的輸出,它可能與您的php5/cli文件夾中的php.ini文件有關。 – 2014-10-28 14:39:05

+0

感謝您的建議。剛剛嘗試過,仍然得到相同的結果 – 2014-10-28 14:51:16

回答

0

I中的整型數據類型需要將我的輸出參數綁定爲SQLINT4,因爲顯然T-SQL整數變量是4字節整數。試圖將它們強制爲容量較小的數據類型(即SQLINT1,SQLINT2或SQLBIT)會導致不可預知的輸出。

所以,我改......

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

它工作得很好。

相關問題