使用している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回呼び出す必要はないので、ここで私が間違ったことを誰かにアドバイスしてもらえますか。
前もって感謝します!