2017-01-31 15 views
0

PHPからSQL Serverストアドプロシージャを実行しようとしています。ストアドプロシージャは出力値を返します。 PHPの値をWebページに表示したい。PHPからの出力パラメータ付きSQL Serverストアドプロシージャを呼び出す

出力値がPHPで0を返しますが、すべてが正常に動作しますが、行は完全に挿入されています。出力値は0と表示されます。ここで私は間違いを犯しました。以下は私のPHPコード

require('db.php'); 

    $billno = "REF0001"; 
    $retsno = 0.0; 

    $sp_name = "{call testinsert(?, ?)}"; 

    $params = array( 
        array($billno, SQLSRV_PARAM_IN), 
        array($retsno, SQLSRV_PARAM_OUT) 
        ); 

    /* Execute the query. */ 
    $stmt3 = sqlsrv_query($conn, $sp_name, $params); 
    if($stmt3 === false) 
    { 
     echo "Error in executing statement 3.\n"; 
     die(print_r(sqlsrv_errors(), true)); 
    } 


    echo "Inserted Retuern Sno for ".$billno." is ". $retsno. "."; 

と私のストアドプロシージャは、たぶん、あなたは、スクロール可能な逃した

create procedure testinsert(@bill_no VARCHAR(20),@RetSno INT OUTPUT) 
as 
begin 
    insert into testable values(@bill_no,GETDATE()) 
    set @RetSno = @@IDENTITY 
    return 
end 
+1

これらの変数はあなたがそれらをエコーするとき、あなたはそれらの初期値(REF0001、0,0)を取得するように改変されていません。これらの変数に更新された値を割り当てる必要があります。または私は何かを逃していますか? –

+1

'@@ IDENTITY'を通常の番号に置き換えたときに正しい応答が得られたら、試してみてください。 – Andy

+0

アンディ私もそれを試しました。私は単にストアドプロシージャから曖昧な値を返しました。それでも0を返します。 – srinivasan

答えて

0

、次の行を読み取るために以下の行を追加します。 :

$id = sqlsrv_get_field(0); 
0

私は同じケースがあったが、使用してそれを解く:

01命令の最後には、
sqlsrv_next_result($stmt);

が続きます。ここで私はあなたに役立つように私のコードの一部を入れます。



    $totalPaginas = 0; 
    $result = array(); 
    $query = "EXEC DBO.SPS_EJECUTAR_CONSULTA @ReporteID = ?, @FilasPorPagina = ?, @NroPagina = ?, @TotalPaginas = ?"; 
    $params = array(
     array(&$reporteid, SQLSRV_PARAM_IN), 
     array(&$filasPorPagina, SQLSRV_PARAM_IN), 
     array(&$nroPagina, SQLSRV_PARAM_IN), 
     array(&$totalPaginas, SQLSRV_PARAM_OUT) 
    ); 
    $stmt = sqlsrv_prepare($this->db, $query, $params); 
    if(!$stmt) { 
     // show errors 
    } 
    $result = sqlsrv_execute($stmt); 
    if(!$result) { 
     // show errors 
    } 
    $data = array(); 
    while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { 
     $data[] = $row; 
    } 
    sqlsrv_next_result($stmt); 
    var_dum($data); 
    echo('Total Paginas: '.$totalPaginas); 

公式にここでそれを行う方法を説明します: https://docs.microsoft.com/en-us/sql/connect/php/how-to-retrieve-input-and-output-parameters-using-the-sqlsrv-driver

関連する問題