我在使用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指定的参数太多
有人能告诉我这里错过了什么吗?在过去的一天左右时间里,这一直让我抓狂,我真的需要把它修好,这样客户才能看到这一点。
供未来参考:ADO CreateParameter方法
http://www.w3schools.com/ado/met_comm_createparameter.asp
它在VBScript中,但它可能会帮助其他人。