1

使用しているPHPとMSSQLで非常に奇妙な問題が発生しています。私はストアドプロシージャを使用して、ユーザーがデータベースに保存したばかりの情報を取得し、エントリの記録を印刷できるようにしています。

最初は、ヘッダーの詳細を画面に表示するのに問題があったため、$ skip_resultsのブール値をtrueに設定して、動作するようにコードを変更することになりました。これは、関連する情報の行を取得するために、その設定なしでストアドプロシージャをもう一度呼び出す必要があることを意味しました。

これが私がしたことです:

//populate header with order information - this one uses true in the mssql_execute in order to return all the output variables
/* prepare the statement resource */
$confirmationstmt=mssql_init("stored-procedure-name", $link);

/* now bind the parameters to it */
mssql_bind($confirmationstmt, "@var1",  $var1,  SQLVARCHAR, FALSE);
mssql_bind($confirmationstmt, "@var2",  $var2,  SQLFLT8, TRUE);
mssql_bind($confirmationstmt, "@var3",    $var3,    SQLVARCHAR,    TRUE);
mssql_bind($confirmationstmt, "@var4",    $var4,    SQLVARCHAR,    TRUE);
mssql_bind($confirmationstmt, "@var5",    $var5,    SQLVARCHAR,    TRUE);
mssql_bind($confirmationstmt, "@var6",    $var6,    SQLVARCHAR,    TRUE);
mssql_bind($confirmationstmt, "@var7",    $var7,    SQLVARCHAR,    TRUE);
mssql_bind($confirmationstmt, "@var8",    $var8,    SQLINT4,    TRUE);
mssql_bind($confirmationstmt, "@var9", $var9, SQLVARCHAR, true);
mssql_bind($confirmationstmt, "@var10", $var10, SQLFLT8, true);
mssql_bind($confirmationstmt, "@var11", $var11, SQLFLT8, true);
mssql_bind($confirmationstmt, "@var12", $var12, SQLFLT8, true);
mssql_bind($confirmationstmt, "@var13", $var13, SQLFLT8, true);

// now execute the procedure
$confirmationresult = mssql_execute($confirmationstmt, true);

//populate header with order information - this one uses true in the mssql_execute in order to return all the output variables
/* prepare the statement resource */
$numlinesstmt=mssql_init("stored-procedure-name", $link);

/* now bind the parameters to it */
mssql_bind($numlinesstmt, "@var1",  $var1,  SQLVARCHAR, FALSE);
mssql_bind($numlinesstmt, "@var2",  $var2,  SQLFLT8, TRUE);
mssql_bind($numlinesstmt, "@var3",    $var3,    SQLVARCHAR,    TRUE);
mssql_bind($numlinesstmt, "@var4",    $var4,    SQLVARCHAR,    TRUE);
mssql_bind($numlinesstmt, "@var5",    $var5,    SQLVARCHAR,    TRUE);
mssql_bind($numlinesstmt, "@var6",    $var6,    SQLVARCHAR,    TRUE);
mssql_bind($numlinesstmt, "@var7",    $var7,    SQLVARCHAR,    TRUE);
mssql_bind($numlinesstmt, "@var8",    $var8,    SQLINT4,    TRUE);
mssql_bind($numlinesstmt, "@var9", $var9, SQLVARCHAR, true);
mssql_bind($numlinesstmt, "@var10", $var10, SQLFLT8, true);
mssql_bind($numlinesstmt, "@var11", $var11, SQLFLT8, true);
mssql_bind($numlinesstmt, "@var12", $var12, SQLFLT8, true);
mssql_bind($numlinesstmt, "@var13", $var13, SQLFLT8, true);

// now execute the procedure
$numlinesresult = mssql_execute($numlinesstmt);

$numlines = mssql_num_rows($numlinesresult);

mssql_bindステートメントの最初のセットの変数はすべて正しく入力されており、2番目の呼び出しでそれらが上書きされることが予想されますが、そうではありません。この「修正」をサイトに最初に適用したとき、$ numlines変数が正しく入力されていたため、ストアドプロシージャが作成するselectステートメントによって戻されたすべての行を処理できました。ただし、24時間後、2番目のセットが機能しなくなり、mssql_num_rows($ numlinesresult)呼び出しから0が取得されました。

すべての情報を取得するために、ストアドプロシージャを毎回異なる方法で2回呼び出す必要はないので、ここで私が間違ったことを誰かにアドバイスしてもらえますか。

前もって感謝します!

4

1 に答える 1

2

ストアド プロシージャが含まれていますSET NOCOUNT ON

于 2012-12-06T16:58:45.183 に答える