-
- $conn=mssql_connect("127.0.0.1","user","passwd");
- mssql_select_db("mydb");
- $stmt=mssql_init("pr_name",$conn) ;//
- $a=50001;
- mssql_bind($stmt,"RETVAL",$val,SQLVARCHAR); //return -103 などの値を直接返すために使用されます。
- mssql_bind($stmt,"@outvar",$b,SQLVARCHAR,true);//ストアド プロシージャで定義された出力パラメータを返すために使用されます
- mssql_bind($stmt,"@invar",$a,SQLINT4);
- $result = mssql_execute($stmt,true);//結果セットを返すことはできません。取得できるのは出力パラメータのみです
- //$result = mssql_execute($stmt,false); //結果セットを返します
- //$ records=mssql_fetch_array( $result);
- //print_r($records);
- //mssql_next_result($result);次の結果セット (FALSE に等しい場合)、次の結果セットは出力パラメーターです
- echo $b;
- echo $val;
- ?> ;
コードをコピー 以下は他の場所で見たものです。
ちょっとしたトラブル:
いつものように、出力パラメータ nReturn を与える MS SQL Server のストアド プロシージャ procA を使用します。
そして結果セットが返されます。
PHP にこの procA を呼び出すように要求するときに、少し問題が発生しました。
ケーキを持って食べることもできません。
私は当初、そのようなコードが出力パラメーターと返された結果セットの両方を取得できることを期待していました: - // ストアド プロシージャに渡されるパラメーターを初期化します:
- $n Year = 2004;
- $ nPageSize = 20;
- $nPageNo = 1;
- // ストアド プロシージャを初期化します:
- $stmt = mssql_init("proc_stat_page", $db_mssql->Link_ID);
- // バインド入力パラメータ:
- mssql_bind($stmt, " @nReturn", $nReturn, SQLINT4, TRUE);
- mssql_bind($stmt, "@nyear", $nyear, SQLINT4);
- mssql_bind($stmt, "@nPageSize", $nPageSize, SQLINT4);
- mssql_bind($ stmt, "@nPageNo", $nPageNo, SQLINT4);
- //ストアド プロシージャを実行し、QueryID を取得します:
- $db_mssql->Query_ID = mssql_execute($stmt,false);
コードをコピーします
ただし、結果セットは取得できましたが、$nReturn パラメータでは出力パラメータを取得できません。
最後の文を次のように変更すると、
$db_mssql->Query_ID = mssql_execute($stmt,true);
出力パラメータは取得されますが、結果セットは失われます。
ケーキを持って食べることもできないようです。
PHPではこんな事も出来ないのでしょうか?この問題は PHP マニュアルには記載されていません。
PHP メンテナーからの説明:
もともと、この呼び出しメソッドは PHP 4.3 より前に確実にサポートされていました。
「ただし、PHP バージョン 4.3 以降、複数の結果セットを返すストアド プロシージャと互換性を持たせるために、PHP はこの機能を変更しました 」と彼らは述べています。
「結果セットが必要ない場合は、mssql_execute メソッドの後に出力パラメーターを取得できるように、mssql_execute の 2 番目のオプション パラメーターを TRUE に設定する必要があります。」
「結果セットを返す必要がある場合は、結果セットごとに mssql_next_result を 1 回呼び出す必要があります。最後の結果セットが返された後、mssql_next_result を呼び出すと戻り値 FALSE が返されます。この時点で、出力パラメーターにアクセスできます。」
解決する:
最後に文を追加します:
- // 最後の結果が返された後、戻り値にはストアド プロシージャによって返された値が含まれます。
- mssql_next_result($db_mssql->Query_ID);
-
Copyコード
すぐに魔法が効きました。
PHP は $nRetVal に正しい出力パラメータを設定します。
|