2017-01-31 2 views
0

Ich versuche, eine sql Server gespeicherte Prozedur von PHP auszuführen. Gespeicherte Prozedur gibt einen Ausgabewert zurück. Ich möchte diesen Wert in PHP auf der Webseite anzeigen.SQL Server gespeicherte Prozedur mit Ausgabeparameter von PHP aufrufen

Alles funktioniert gut, außer der Ausgangswert gibt 0 in php .. aber die Zeile wird perfekt eingefügt. der Ausgabewert zeigt als 0. genervt an, wo ich den Fehler gemacht habe. Unten ist mein PHP-Code

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. "."; 

und meine gespeicherten Prozedur ist

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

Diese Variablen werden nicht geändert, so, wenn Sie sie echo Sie ihre Anfangswerte erhalten (REF0001, 0,0). Sie müssen den Variablen die aktualisierten Werte zuweisen. Oder fehlt mir etwas? –

+1

Bitte versuchen Sie es, wenn Sie die richtige Antwort erhalten, wenn Sie die '@@ IDENTITY' durch eine normale Nummer ersetzen. – Andy

+0

Andy, ich habe das auch versucht. Ich habe einfach einen vagen Wert aus der gespeicherten Prozedur zurückgegeben. immer noch 0 zurück – srinivasan

Antwort

0

Bevor Sie Ihre echo verwenden, fügen Sie die folgende Zeile die nächste Zeile zu lesen:

sqlsrv_fetch($stmt3); 

Dann können Sie das erste Feld der Antwort auswählen, die Ihre Parameter sein sollte, mit sqlsrv_get_field() :

$id = sqlsrv_get_field(0); 
0

hatte ich den gleichen Fall und löste es mit:

sqlsrv_next_result($stmt);

am Ende der Anweisung. Hier gebe ich einen Teil meines Codes für den Fall, dass es Ihnen hilft.



    $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); 

sagt Ihnen offiziell, wie es geht hier: https://docs.microsoft.com/en-us/sql/connect/php/how-to-retrieve-input-and-output-parameters-using-the-sqlsrv-driver

Verwandte Themen