我遇到来自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指定了太多参数
任何人都可以建议我在这里错过了什么吗?这在最后一天左右让我疯了,我真的需要修复它,以便客户可以看看这个。
答案 0 :(得分:-1)
供将来参考: ADO CreateParameter方法
http://www.w3schools.com/ado/met_comm_createparameter.asp
它在VBScript中,但它可能会帮助其他人。