2017-01-31 2 views
0

Я пытаюсь выполнить хранимую процедуру сервера SQL с php. Сохраненная процедура возвращает выходное значение. Я хочу, чтобы это значение в php отображалось на веб-странице.Вызовите хранимую процедуру SQL Server с параметром вывода из PHP

Все работает отлично, за исключением того, что выходное значение возвращает 0 в php .., но строка вставлена ​​отлично. выходное значение отображается как 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

PLease попробуйте, если вы получите правильный ответ при замене '@@ IDENTITY' на нормальное число. – Andy

+0

Энди Я тоже это пробовал. я просто вернул неопределенное значение из хранимой процедуры. все равно он возвращает 0. – srinivasan

ответ

0

Перед тем, как использовать echo, добавьте следующую строку, чтобы прочитать следующую строку:

sqlsrv_fetch($stmt3); 

Затем вы можете выбрать первое поле ответа, который должен быть ваш параметр, с sqlsrv_get_field() :

$id = sqlsrv_get_field(0); 
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/en-us/sql/connect/php/how-to-retrieve-input-and-output-parameters-using-the-sqlsrv-driver

Смежные вопросы