ダウンロード サンプルコード (2.7 KB)
PHPから3つのデータベースエクステンション(MySQL、MySQLi、PDO)を使ってMySQLのストアドプロシージャまたはストアドファンクションを呼び出す方法について考察します。
はじめに
MySQL 5.0の新機能にストアドプロシージャとストアドファンクションというものがあります。ストアドプロシージャとは、1つ以上のSQLステートメントを1つの手続きとしてまとめ上げ、それをデータベースサーバに格納したものです。
本稿では、基本的なストアドプロシージャとストアドファンクションの作り方を示したうえで、PHPからデータベースエクステンションを利用してMySQLのストアドプロシージャとストアドファンクションを呼び出す方法を説明します。
ストアドプロシージャを使うメリット
ストアドプロシージャには、パフォーマンスを高める効果があります。理由は、事前にコンパイルでき、しかもクライアントからサーバに名前と必要なパラメータだけを送信すれば実行でき、コードを丸ごと送信しなくて済むからです。そのほか次のメリットがあります。
- 簡単に使える1つの単位として処理をまとめ上げることで複雑な操作を単純化できる
- 十分に検証されたストアドプロシージャを再利用することで、エラーの発生を抑えることができる
- 実行方法が言語や環境に依存しない。データベースサーバの側に置かれるので、呼び出すアプリケーション環境が違ってもストアドプロシージャそのものは変化しない
- データへのアクセスを制限することでデータ破壊のリスクを減らせる
- ネットワークトラフィックを削減できる。複雑なタスクを反復的に実行する場合は、データを取得して何らかのロジックを適用し、その結果に基づいて別のデータを取得するといったことが必要になるが、こうした複数ステップの処理がデータベースサーバ上で完結するため、クライアントとデータベースサーバの間で結果セットや新たなクエリを往復させなくて済む
MySQLでのストアドプロシージャの作成
MySQL 5.0になって、ようやくストアドプロシージャの機能が導入されました。この実装では、個々のストアドプロシージャまたはストアドファンクションが特定のデータベースに関連付けられます。そのため次のような性質があります。
- ストアドプロシージャ(またはストアドファンクション)を呼び出すと、データベースで自動的に
USE db_nameコマンドが実行され、ストアドプロシージャの終了までその効果が持続する - 特定のデータベースで作成できるストアドプロシージャの名前は、そのデータベース内で一意的に決まるものでなければならない。例えば、
bookデータベースに関連付けられたストアドプロシージャprocまたはストアドファンクションfuncを呼び出すには、CALL book.proc()またはCALL book.func()と書く - データベースを削除すると、そのデータベースに関連付けられたストアドプロシージャやストアドファンクションもすべて削除される
プロシージャまたはファンクションの定義は次の2ステップで行われます。
- プロシージャまたはファンクションの名前を定義し、そのパラメータを設定する
- プロシージャまたはファンクションの本体をステートメント
BEGINとENDの間に定義する
基本的な構文は次のとおりです。
CREATE PROCEDURE procedure_name ([procedure_parameter[,...]])
routine_body
procedure_parameterは、パラメータと方向を示す次の引数から成るリストです。
IN:値をプロシージャに渡す。その値をプロシージャは変更できるが、プロシージャから復帰したとき、呼び出し元には変更は見えないOUT:値をプロシージャから呼び出し元に戻す。プロシージャ内のパラメータの初期値はNULL。通常、プロシージャはこの値を変更し、プロシージャから復帰したとき呼び出し元には最終的な値が見えるINOUT:このINOUTパラメータを初期化するのは呼び出し元だが、プロシージャも値を変更でき、プロシージャから復帰したとき呼び出し元には最終的な値が見える
IN、OUT、またはINOUTパラメータは、プロシージャでのみ使用できます。ファンクションのパラメータは常にINパラメータになります。
この記事は参考になりましたか?
- japan.internet.com翻訳記事連載記事一覧
- この記事の著者
-
japan.internet.com(ジャパンインターネットコム)
japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
Octavia Andreea Anghel(Octavia Andreea Anghel)
経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
