ホームページ バックエンド開発 PHPチュートリアル PHP得到mssql的存储过程的输出参数功能实现_php技巧

PHP得到mssql的存储过程的输出参数功能实现_php技巧

May 17, 2016 am 09:07 AM
ストアドプロシージャ

在开发过程中可能会遇到无法取得MSSQL存储过程的输出参数,很多朋友都不知道该怎么办,本文将详细介绍PHP得到mssql的存储过程的输出参数功能实现,需要了解的朋友可以参考下

复制代码 代码如下:


$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;
?>

下面这些是从别的地方看到的。
小麻烦
我们按照惯例使用了一个MS Sql Server的存储过程procA,它给出了一个输出参数nReturn,
而且返回了一个结果集。
在如何让PHP调用这个procA的时候,我们遭遇了一点小麻烦。
鱼肉和熊掌不可兼得:
我们本来希望这样的代码能够既得到输出参数,又得到返回的结果集:
复制代码 代码如下:

// 初始化要传进存储过程的参数们:
$nYear = 2004;
$nPageSize = 20;
$nPageNo = 1;
// Initializes a stored procedure:
$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的第二个可选参数为TRUE,这样mssql_execute方法之后你就可以得到输出参数了。”

“如果你需要返回的结果集们,你应该为每一个结果集调用一次mssql_next_result。在最后一个结果集返回之后,你再调用mssql_next_result就会得到返回值FALSE,这时候,你就可以访问输出参数了。”
解决:
在最后我们补上一句话
// After the last result has been returned the return value will have the value returned by the stored procedure.
mssql_next_result($db_mssql->Query_ID);
立刻,魔法生效了:
PHP填充了正确的输出参数到$nRetVal里。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle ストアド プロシージャを使用してバッチ更新を実装する手順と注意事項 Oracle ストアド プロシージャを使用してバッチ更新を実装する手順と注意事項 Mar 08, 2024 pm 04:12 PM

タイトル: Oracle ストアド プロシージャによるバッチ更新を実装するための手順と注意事項 Oracle データベースでは、ストアド プロシージャは、データベースのパフォーマンスの向上、コードの再利用、およびセキュリティの強化を目的に設計された一連の SQL ステートメントです。ストアド プロシージャを使用して、データをバッチで更新できます。この記事では、Oracle ストアド プロシージャを使用してバッチ更新を実装する方法を紹介し、具体的なコード例を示します。ステップ 1: ストアド プロシージャを作成する まず、バッチ更新操作を実装するストアド プロシージャを作成する必要があります。ストアドプロシージャの作成方法は次のとおりです。

MySQLでストアドプロシージャを削除する方法 MySQLでストアドプロシージャを削除する方法 Sep 05, 2023 am 10:25 AM

MySQL でストアド プロシージャを削除する方法には、DROP PROCEDURE ステートメントの使用、MySQL Workbench の使用、コマンド ライン ツールの使用などがあります。詳細な紹介: 1. DROP PROCEDURE ステートメントを使用します。手順としては、まず MySQL クライアントを開くか、MySQL をサポートするツールを使用し、次に MySQL データベースに接続し、最後に次の SQL ステートメントを実行してストアド プロシージャを削除します。 MySQL Workbench を使用してストアド プロシージャなどを削除します。

Oracleストアドプロシージャ:テーブルが存在するかどうかを判定する実装方法 Oracleストアドプロシージャ:テーブルが存在するかどうかを判定する実装方法 Mar 08, 2024 pm 09:18 PM

Oracle データベースのストアド プロシージャは、データベース内で一連の SQL ステートメントとデータ操作を実行するために使用される特定のタイプのストアド プロシージャです。実際のデータベース開発作業では、格納プロセスで何らかの判断や論理処理を行うために、データベース内に特定のテーブルが存在するかどうかを判断する必要があることがあります。以下では、Oracle データベースにテーブルが存在するかどうかを判断するメソッドの実装方法と、具体的なコード例を紹介します。まず、システム テーブル user_tables または all_t を使用できます。

Golang ストアド プロシージャの実装原則とアプリケーション Golang ストアド プロシージャの実装原則とアプリケーション Feb 22, 2024 pm 04:57 PM

Golang ストアド プロシージャの実装原理とアプリケーション ストアド プロシージャは、リレーショナル データベースに保存され、アプリケーションから呼び出すことができるプリコンパイルされたプログラムであり、データのネットワーク送信コストを効果的に削減し、データベースの実行効率を向上させることができます。 Golang はストアド プロシージャを直接サポートしていませんが、SQL ステートメントを使用してストアド プロシージャの機能をシミュレートできます。この記事では、Golang でストアド プロシージャを実装する原則と応用を紹介し、具体的なコード例を示します。 1. Golangストアドプロシージャの実装原理はGolにある

C# を使用して MySQL でカスタム ストアド プロシージャと関数を作成する方法 C# を使用して MySQL でカスタム ストアド プロシージャと関数を作成する方法 Sep 22, 2023 am 09:42 AM

C# を使用して MySQL でカスタム ストアド プロシージャと関数を作成する方法 はじめに: MySQL は広く使用されているオープン ソース データベース管理システムであり、C# は一般的に使用されているオブジェクト指向プログラミング言語です。開発プロセスでは、コードの再利用性とパフォーマンスを向上させるために、データベースのストアド プロシージャや関数を使用する必要がよくあります。この記事では、C# を使用して MySQL データベースにカスタム ストアド プロシージャと関数を作成する方法を紹介し、具体的なコード例を示します。 1. ストアド プロシージャ ストアド プロシージャは、特定のタスクを実行する一連の SQL ステートメントです。

Oracle ストアド プロシージャと関数の詳細な比較と利点分析 Oracle ストアド プロシージャと関数の詳細な比較と利点分析 Mar 03, 2024 am 10:24 AM

タイトル: Oracle ストアド プロシージャとファンクションの詳細な比較と利点分析。Oracle データベースでは、ストアド プロシージャとストアド ファンクションは 2 つの重要なデータベース オブジェクトです。これらは両方とも、一連の SQL ステートメントとロジックをカプセル化して、データの効率と複雑さを向上させるために使用できます。操作性、使いやすさ。この記事では、Oracle ストアド プロシージャと関数の特性とそれぞれの利点を詳細に比較し、具体的なコード例を示します。ストアド プロシージャ ストアド プロシージャは、事前に作成されてデータベースに保存されている一連の SQL 文と PL/SQL コード ロジックです。

保守しやすい Golang ストアド プロシージャを作成する 保守しやすい Golang ストアド プロシージャを作成する Feb 24, 2024 pm 08:27 PM

Golang で保守可能なストアド プロシージャを作成する方法 Golang で保守可能なストアド プロシージャを作成する場合は、まずストアド プロシージャの概念と、Golang でストアド プロシージャを実装する方法を理解する必要があります。ストアド プロシージャは、データベースに保存されている、一連の SQL ステートメントを含む再利用可能なコード ブロックです。ストアド プロシージャはコードを簡素化し、パフォーマンスを向上させ、ビジネス ロジックをカプセル化します。この記事では、Golang で保守可能なストアド プロシージャを作成する方法を紹介し、具体的なコード例を示します。 1. まずデータベースに接続します

PHP を使用して MySQL でカスタム トリガーとストアド プロシージャを作成する方法 PHP を使用して MySQL でカスタム トリガーとストアド プロシージャを作成する方法 Sep 20, 2023 am 11:25 AM

PHP を使用して MySQL でカスタム トリガーとストアド プロシージャを作成する方法 はじめに: アプリケーションを開発するとき、多くの場合、データの挿入、更新、削除など、データベース レベルでいくつかの操作を実行する必要があります。 MySQL は広く使用されているリレーショナル データベース管理システムであり、PHP は一般的なサーバー側スクリプト言語です。この記事では、PHP を使用して MySQL でカスタム トリガーとストアド プロシージャを作成する方法を紹介し、具体的なコード例を示します。 1. トリガーおよびストアド プロシージャ トリガー (Trigg

See all articles