ストアドプロシージャ
MySQL データベースは、ストアドプロシージャをサポートしています。
ストアドプロシージャは、
データベースカタログに保存されたサブルーチンです。
アプリケーションは、ストアドプロシージャを呼び出し、実行できます。
ストアドプロシージャを実行するには、SQL ステートメント
ストアドプロシージャへの引数
MySQL のバージョンによっては、
ストアドプロシージャで IN パラメータ
例1 ストアドプロシージャを呼び出す
<?php 上の例の出力は以下となります。 array(1) { ["id"]=> string(1) "1" } INOUT/OUT パラメータ
例2 セッションの値を使う
<?php 上の例の出力は以下となります。 Hi! アプリケーションやフレームワークの開発者は、 セッションの値やデータベースカタログを調べることによって、 もっと便利なAPIを提供できます。 しかし、カタログを調べることをベースにしたカスタムのやり方は、 パフォーマンスに影響がある可能性があることに注意して下さい。 結果セットを扱う ストアドプロシージャは、 結果セットを返すことができます。 ストアドプロシージャから返された結果セットは、 mysqli::query を使っても正しく取得できません。 mysqli::query は、ステートメントを実行し、 バッファリングされた結果セットから、存在する場合にだけ、 最初の結果セットを返すものです。 しかし、 mysqli::query は、 ストアドプロシージャが返す追加の結果セットを隠してしまうため、 ユーザが期待する結果セットを返すことに失敗してしまうのです。
ストアドプロシージャから返される結果セットは、
mysqli::real_query
や mysqli::multi_query を使うと取得できます。
これらの関数は、
例3 ストアドプロシージャから、結果を取得する
<?php 上の例の出力は以下となります。 --- array(3) { [0]=> array(1) { [0]=> string(1) "1" } [1]=> array(1) { [0]=> string(1) "2" } [2]=> array(1) { [0]=> string(1) "3" } } --- array(3) { [0]=> array(1) { [0]=> string(1) "2" } [1]=> array(1) { [0]=> string(1) "3" } [2]=> array(1) { [0]=> string(1) "4" } } プリペアドステートメントを使う
上に示した、同じストアドプロシージャから結果を取得する場合に、
プリペアドステートメントを使う場合であっても、
特別な操作は必要ありません。
プリペアドステートメントと、
それを用いないインターフェイスは似ています。
全てのバージョンの MySQL サーバーが、
例4 ストアドプロシージャとプリペアドステートメント
<?php 上の例の出力は以下となります。 --- array(3) { [0]=> array(1) { [0]=> int(1) } [1]=> array(1) { [0]=> int(2) } [2]=> array(1) { [0]=> int(3) } } --- array(3) { [0]=> array(1) { [0]=> int(2) } [1]=> array(1) { [0]=> int(3) } [2]=> array(1) { [0]=> int(4) } } もちろん、 値を取得するためのバインドAPIもサポートしています。
例5 バインドAPIを使って、プリペアドステートメントとストアドプロシージャを実行する
<?php 上の例の出力は以下となります。 id = 1 id = 2 id = 3 id = 2 id = 3 id = 4 参照
|