2016-08-09 56 views
2

Ich habe eine gespeicherte Prozedur mit ein paar Eingabeparameter und einem Ausgabeparameter erstellt. Wenn ich versuche, es von PHP aus aufzurufen, bekomme ich einen Fehler. Mein Code ist wie folgt:PHP Sql Server Output Parameter gibt Fehler

$ID = 0; 
$sql = "exec Apprasial_Details_Insert 
     @Employee_Name = '".$_POST["Emp_Name"]."', 
     @Position = '".$_POST["Position"]."', 
     @Dept_Branch = '".$_POST["Branch"]."', 
     @Location = '".$_POST["Location"]."', 
     @Appraiser_Name_1 = '".$_POST["1Appraiser"]."', 
     @Appraiser_Name_2 = '".$_POST["2Appraiser"]."', 
     @Title_1 = '".$_POST["1AppraiserTitle"]."', 
     @Title_2 = '".$_POST["2AppraiserTitle"]."', 
     @Date = '$datetime_formatted', 
     @Grand_Total = '".$_POST["GrandTotal"]."', 
     @Staff_ID = '".$_POST["Staff_ID"]."' 
     @new_identity = $ID"; 
$procedure_params = array 
(
    array(&$ID['new_identity'], SQLSRV_PARAM_OUT,SQLSRV_PHPTYPE_INT) 
);  
$stmt = sqlsrv_query($conn, $sql,$procedure_params); 
if($stmt === false) 
{ 
    //header("Location: error.php?id=$statement"); 
    die(print_r(sqlsrv_errors(), true)); 
} 

Der Fehler erhalte ich:

Array ([0] => Array ([0] => 42000 [SQLSTATE] => 42000 1 => 102 [code] => 102 2 => [Microsoft] [ODBC-Treiber 11 für SQL Server] [SQL Server] Falsche Syntax in der Nähe von '@new_identity'. [Nachricht] => [Microsoft] [ODBC-Treiber 11 für SQL Server ] [SQL Server] Falsche Syntax in der Nähe von '@new_identity'.))

Wenn ich meinen Code zu ändern:

$sql = "exec Apprasial_Details_Insert 
     @Employee_Name = '".$_POST["Emp_Name"]."', 
     @Position = '".$_POST["Position"]."', 
     @Dept_Branch = '".$_POST["Branch"]."', 
     @Location = '".$_POST["Location"]."', 
     @Appraiser_Name_1 = '".$_POST["1Appraiser"]."', 
     @Appraiser_Name_2 = '".$_POST["2Appraiser"]."', 
     @Title_1 = '".$_POST["1AppraiserTitle"]."', 
     @Title_2 = '".$_POST["2AppraiserTitle"]."', 
     @Date = '$datetime_formatted', 
     @Grand_Total = '".$_POST["GrandTotal"]."', 
     @Staff_ID = '".$_POST["Staff_ID"]."' 
     @new_identity = ?"; 
$procedure_params = array 
(
    array(&$ID['new_identity'], SQLSRV_PARAM_OUT) 
);  
$stmt = sqlsrv_query($conn, $sql,$procedure_params); 
if($stmt === false) 
{ 
    //header("Location: error.php?id=$statement"); 
    die(print_r(sqlsrv_errors(), true)); 
} 

Der Fehler erhalte ich:

Array ([0] => Array ([0] => IMSSP [SQLSTATE] => IMSSP 1 => -7 [code] => -7 2 => Es wurde ein ungültiger PHP-Typ als Ausgabe-Parameter angegeben. DateTime-Objekte, NULL-Werte und Streams können nicht als Ausgabeparameter angegeben werden. [message] => Ein ungültiger PHP-Typ wurde als Ausgabeparameter angegeben. DateTime-Objekte, NULL-Werte und Streams können nicht als Ausgabeparameter angegeben werden.))

ich an den Pfosten unter refered:

Link 1 Link 2

Wo habe ich falsch gemacht? Die Anregungen/Hilfe

Antwort

1

Sie Komma müssen nach @Staff_ID = '".$_POST["Staff_ID"]."' so:

$ID = 0; 
$sql = "exec Apprasial_Details_Insert 
     @Employee_Name = '".$_POST["Emp_Name"]."', 
     @Position = '".$_POST["Position"]."', 
     @Dept_Branch = '".$_POST["Branch"]."', 
     @Location = '".$_POST["Location"]."', 
     @Appraiser_Name_1 = '".$_POST["1Appraiser"]."', 
     @Appraiser_Name_2 = '".$_POST["2Appraiser"]."', 
     @Title_1 = '".$_POST["1AppraiserTitle"]."', 
     @Title_2 = '".$_POST["2AppraiserTitle"]."', 
     @Date = '$datetime_formatted', 
     @Grand_Total = '".$_POST["GrandTotal"]."', 
     @Staff_ID = '".$_POST["Staff_ID"]."', 
     @new_identity = $ID"; 
$procedure_params = array 
(
    array(&$ID['new_identity'], SQLSRV_PARAM_OUT,SQLSRV_PHPTYPE_INT) 
);  
$stmt = sqlsrv_query($conn, $sql,$procedure_params); 
if($stmt === false) 
{ 
    //header("Location: error.php?id=$statement"); 
    die(print_r(sqlsrv_errors(), true)); 
} 
+0

Okay, jetzt bin dumm fühlen! Danke für die Antwort :) Schätze es :) – SR1092