繁体   English   中英

使用PHP的输出参数调用SQL Server存储过程

[英]Call SQL Server stored procedure with output parameter from PHP

我正在尝试从php执行sql服务器存储过程。 存储过程返回一个输出值。 我希望php中的值显示在网页中。

一切工作正常,除了输出值在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

也许您错过了滚动。 https://msdn.microsoft.com/zh-CN/library/hh487160(v=sql.105).aspx

$stmt3 = sqlsrv_query( $conn, $sp_name, $params, array( "Scrollable" => 'static'));

在使用echo之前,添加以下行以读取下一行:

sqlsrv_fetch($stmt3);

然后,您可以使用sqlsrv_get_field()选择响应的第一个字段,该字段应为您的参数:

$id = sqlsrv_get_field(0);

我有同样的情况,并使用以下方法解决了问题:

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/zh-cn/sql/connect/php/how-to-retrieve-input-and-output-parameters-using-the-sqlsrv-driver

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM