形式参数未声明为输出参数 - SQL Server& PHP

时间:2012-07-16 09:15:38

标签: php sql-server stored-procedures

我遇到来自SQL Server和PHP的存储过程的问题。我正在开发一个系统,它接受订单行,生成订单标题,然后将订单行放入SQL Server数据库。一切都很顺利,直到我尝试将每个订单行添加到数据库。我已经实现了以下代码:

//Add code here to add the item to the order
// Create order header
/* prepare the statement resource */
$stmt=mssql_init("SPNAME1", $link);

/* now bind the parameters to it */
mssql_bind($stmt, "@CustNum",  $_SESSION['CustNum'],  SQLVARCHAR, FALSE);
mssql_bind($stmt, "@OrderCustSeq",  $_SESSION['CustSeq'],  SQLVARCHAR, FALSE);

if (isset($_REQUEST['TextBoxOrderNumber'])) {
    mssql_bind($stmt, "@OrderCustPo",  $_REQUEST['TextBoxOrderNumber'],  SQLVARCHAR, FALSE);
}

if (isset($_REQUEST['comboDispatchMethods'])) {
    mssql_bind($stmt, "@OrderShipVia",  $_REQUEST['comboDispatchMethods'],  SQLVARCHAR, FALSE);
} else {
    $_REQUEST['comboDispatchMethods'] = NULL;
    mssql_bind($stmt, "@OrderShipVia",  $_REQUEST['comboDispatchMethods'],  SQLVARCHAR, FALSE);
}

if (isset($_REQUEST['comboOrderTypes'])) {
    mssql_bind($stmt, "@OrderPriceCode",  $_REQUEST['comboOrderTypes'],  SQLVARCHAR, FALSE);
} else {
    $_REQUEST['comboOrderTypes'] = NULL;
    mssql_bind($stmt, "@OrderPriceCode",  $_REQUEST['comboOrderTypes'],  SQLVARCHAR, FALSE);
}

//now bind the output variables
mssql_bind($stmt, "@NewCoNumber", $NewCoNumber, SQLVARCHAR, true);

// now execute the procedure
$result = mssql_execute($stmt) or die ("Error in sp query: $query. " .mssql_get_last_message()); 

//Store each order line to the database
foreach( $_SESSION['orderarray'] as $obj )
{
    $SearchString = $obj['PartNo'];
    $qty = $obj['QtyReq'];

    /* prepare the statement resource */
    $addorderline=mssql_init("SPNAME2", $link);

    /* now bind the parameters to it */
    mssql_bind($addorderline, "@CoNum",    $NewCoNumber,    SQLVARCHAR,    FALSE);
    mssql_bind($addorderline, "@OrderItem",  $SearchString,  SQLVARCHAR, FALSE);
    mssql_bind($addorderline, "@QtyRequired", $qty, SQLFLT8, FALSE);

    // now execute the procedure
    $addorderresult = mssql_execute($addorderline) or die ("Error in sp query: $addorderline " .mssql_get_last_message()); 

    mssql_free_statement($addorderline);
    mssql_free_result($addorderresult); 
}

mssql_free_result($result);
mssql_free_statement($stmt);

当我尝试添加订单时,第一个存储过程运行没有任何问题,但是我收到了来自$ addorderresult的错误报告:

  

形式参数“@PriceCode”未声明为OUTPUT参数,而是在请求的输出中传递的实际参数

页面上的任何一点都没有声明@PriceCode,尽管我确实在代码的另一部分中返回$ row ['PriceCode'],这在发送数据进行存储时没有被执行。删除该引用无助于解决该问题。事实上,@ PriceCode不存在于网站的任何页面中。据我所知,错误应该表明我使用@PriceCode作为输出变量,但不是这样声明它。我尝试将@PriceCode绑定到SPNAME2存储过程,但是又出现了另一个错误 - 这次说明:

  

过程或函数SPNAME2指定了太多参数

任何人都可以建议我在这里错过了什么吗?这在最后一天左右让我疯了,我真的需要修复它,以便客户可以看看这个。

1 个答案:

答案 0 :(得分:-1)

供将来参考: ADO CreateParameter方法

http://www.w3schools.com/ado/met_comm_createparameter.asp

它在VBScript中,但它可能会帮助其他人。