2017-10-17 13 views
1

戻らない -PHP/sqlsrv_queryリソースIDは3ですが、私は、単純なストアドプロシージャ持つデータ

CREATE PROCEDURE [dbo].[usp_ws_s_GetCargoClearanceApproval_t] 
    @BOLID INT, 
    @ACCOUNTID INT, 
    @TOTALAMOUNT FLOAT OUT, 
    @STORAGEDAYS INT OUT, 
    @ACCOUNTCREDIT FLOAT OUT, 
    @CREDITLIMIT FLOAT OUT 
AS 

BEGIN 
--SET NOCOUNT ON 
    SET @TOTALAMOUNT= '25.00'; SET @STORAGEDAYS = 5; SET @ACCOUNTCREDIT =2500.00; SET @CREDITLIMIT=75000.00 ; 
    SELECT @TOTALAMOUNT,@STORAGEDAYS,@ACCOUNTCREDIT,@CREDITLIMIT; 
END 

これは、PHPファイルとコードで呼ばれている -

<?php 
$bol_id = 426863; 
$account_id = 26293; 
$totalamount = 0.00; 
$storagedays = 0; 
$accountcredit = 0.00; 
$creditlimit = 0.00; 

$param1 = array($bol_id, SQLSRV_PARAM_IN); 
$param2 = array($account_id, SQLSRV_PARAM_IN); 

$param3 = array($totalamount, SQLSRV_PARAM_OUT); 
$param4 = array($storagedays, SQLSRV_PARAM_OUT); 
$param5 = array($accountcredit, SQLSRV_PARAM_OUT); 
$param6 = array($creditlimit, SQLSRV_PARAM_INOUT); 


$params = array($param1, $param2, $param3, $param4, $param5, $param6); 

$tsql = "{call usp_ws_s_GetCargoClearanceApproval_t(?,?,?,?,?,?)}"; 

$Account_Transaction_List = array(); 

$connectionInfo = array( "Database"=>'**', "UID"=>'**', "PWD"=>'***'); 
$conn = sqlsrv_connect("**", $connectionInfo); 

if($conn === false) { 
    echo "Couldn't connect to SQL Server on $this->servername.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} else { 
    echo "Connected!"; 
} 
echo '<br/>'; 

$result = sqlsrv_query($conn, $tsql, $params); 
echo "<pre/> $result - ";print_r($result); 
echo '<br/>'; 

if ($result !== NULL) { 
    $rows = sqlsrv_has_rows($result); 
    if ($rows === true) 
     echo "\nthere are rows\n"; 
    else 
     echo "\nno rows\n"; 
} 

while($row = sqlsrv_fetch_array($result)) 
{ 
    echo 'IN <br/>'; 
} 

?> 

返品:

Connected!

リソースID#3 - リソースID#3

なしの行に関係なく、私はデータを得ることはありませんしてみてください何

。私はrefでparamsを渡そうとしました。最後の2日間の接続や他の順列にカーソルオプションを設定しました。運がありません。

誰もがこの問題に遭遇しましたか?すべてのポインタが評価されます。私は気づく

おかげ

+0

ストアドプロシージャを単独でテストしようとしましたか? – TinkerTenorSoftwareGuy

+0

'Resource id#3'は、クエリが成功したことを意味するだけで、行を返すわけではありません。だから間違いなくその手順を自分で試して、そこから行ってください。 – aynber

+0

それを見ていただきありがとうございます。 SQL Server管理スタジオで実行すると、spは値を返します。あなたが見ることができるように、SP自体は非常にストレートです。 –

答えて

2

唯一の問題は、$creditlimitSQLSRV_PARAM_INOUTに設定されていることです。私はクエリを実行した後にsqlsrv_errors()をチェックすることをお勧めします。その状況を明らかにした警告が戻ってきているかもしれません。明らかに、sqlsrv拡張子にはspで計算される問題のデータがあります:

<?php 
$bol_id  = 426863; 
$account_id = 26293; 
$totalamount = 0.00; 
$storagedays = 0; 
$accountcredit = 0.00; 
$creditlimit = 0.00; 

$params = [ 
    [$bol_id,  SQLSRV_PARAM_IN], 
    [$account_id, SQLSRV_PARAM_IN], 
    [$totalamount, SQLSRV_PARAM_OUT], 
    [$storagedays, SQLSRV_PARAM_OUT], 
    [$accountcredit, SQLSRV_PARAM_OUT], 
    [$creditlimit, SQLSRV_PARAM_OUT], 
]; 

$conn = sqlsrv_connect("**", ["Database" => "**", "UID"=> "**", "PWD" => "***"]); 

if ($conn === false) { 
    echo "Couldn't connect to SQL Server on $this->servername.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} else { 
    echo "Connected!<br/>"; 
} 

$tsql = "{CALL usp_ws_s_GetCargoClearanceApproval_t(?, ?, ?, ?, ?, ?)}"; 

$result = sqlsrv_query($conn, $tsql, $params); 

if ($err = sqlsrv_errors()) { 
    echo "There were errors or warnings!<br/>"; 
    print_r($err); 
    echo "<br/>"; 
} 

if ($result && sqlsrv_has_rows($result)) { 
    echo "There are rows<br/>"; 
} else { 
    echo "There are no rows<br/>"; 
} 

while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) { 
    print_r($row); 
    echo "<br/>"; 
} 

?> 
+0

ありがとう、miken32、それは動作します。興味深いのは、私はSQLSRV_PARAM_OUTを試してみました。とにかくうまくいっています。 –

0

以前に読み取り、私のSP - 私はどちらかの出力のparamsを設定する必要はありませんでした。この場合には

select @TOTALAMOUNT as TotalAmount,@STORAGEDAYS as StorageDays,@ACCOUNTCREDIT as AccountCredit,@CREDITLIMIT as CreditLimit; 

を読み取るために、SPを変更しなければならなかったデータをフェッチする

ALTER PROCEDURE [dbo].[usp_ws_s_GetCargoClearanceApproval_t] 
@BOLID INT, 
@ACCOUNTID INT, 
@TOTALAMOUNT FLOAT OUT, 
@STORAGEDAYS INT OUT, 
@ACCOUNTCREDIT FLOAT OUT, 
@CREDITLIMIT FLOAT OUT 
AS 

BEGIN 
--SET NOCOUNT ON 
    set @TOTALAMOUNT= '25.00'; SET @STORAGEDAYS = 5; SET @ACCOUNTCREDIT =2500.00; SET @CREDITLIMIT=75000.00 ; 
    select @TOTALAMOUNT,@STORAGEDAYS,@ACCOUNTCREDIT,@CREDITLIMIT; 
END 

は、誰もが幸せです:)

関連する問題