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 に答える