我的php應用程序正在使用MS SQLSrv驅動程序。在對數據庫中的存儲過程進行調用時,在運行sqlsrv_execute()後出現以下錯誤:參數計數和參數計數不匹配。我的代碼如下:PHP:參數計數和參數計數不匹配
$sql = "{call myStoredProcedure(?, ?, ?, ?, ?, ?)}";
//Passing by reference instead of value, otherwise sqlsrv_prepare is not happy
$params = array(array(&$param1, SQLSRV_PARAM_IN),
array(&$param2, SQLSRV_PARAM_IN),
array(&$param3, SQLSRV_PARAM_IN),
array(&$param4, SQLSRV_PARAM_IN),
array(&$param5, SQLSRV_PARAM_IN),
array(&$param6, SQLSRV_PARAM_OUT)
);
/* Create the statement. */
$stmt = sqlsrv_prepare($conn, $sql, $params);
if($stmt)
{
echo "Statement prepared.\n";
}
else
{
echo "Error in preparing statement.\n";
die(print_r(sqlsrv_errors(), true));
}
//TODO: Resolve error, "param count and argument count don't match"
$stmt = sqlsrv_execute($conn, $sql, $params);
//This statement will run, but no rows are returned and rowCount is false.
//$stmt = sqlsrv_query($conn, $sql, $params);
$rowCount = sqlsrv_num_rows($stmt);
$numFields = sqlsrv_num_fields($stmt);
//Rest of code...
我已經花了一個小時了,並通過PHP.Net和微軟文檔進行了梳理。有沒有其他人遇到類似的錯誤?任何幫助表示讚賞。
是的,我檢查了我的參數計數,我的存儲過程需要6個參數。
UPDATE:
存儲過程的代碼片段:
ALTER PROCEDURE [dbo].[myStoredProcedure]
@param1 VARCHAR(64),
@param2 VARCHAR(64),
@param3 DATETIME,
@param4 DATETIME,
@param5 INT = 9,
@param6 INT OUTPUT
AS
BEGIN
//Do stuff
END
你能發佈一些關於實際存儲過程的信息嗎? – MoarCodePlz
瘋狂的猜測,因爲我遠不是專家,但由於最後一個參數是一個輸出參數,我不明白爲什麼它應該被綁定:存儲過程不會對給定值做任何事情。 –
不幸的是,從我讀過的微軟文檔中,您必須提供所有參數,輸入,輸出和雙向輸入/輸出。 – kingrichard2005