我的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