1

我在使用 PHP 的 SQL Server 存储过程时遇到问题。我正在开发一个接收订单行、生成订单标题然后将订单行放入 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 指定的参数过多

谁能建议我在这里错过了什么?过去一天左右这一直让我发疯,我真的需要把它修好,这样客户才能看看这个。

4

1 回答 1

-1

供将来参考:ADO CreateParameter 方法

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

它在 VBScript 中,但它可能对其他人有所帮助。

于 2013-03-28T07:02:05.237 回答