SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

WindowsでPHPからストアドプロシージャ/ストアドファンクションを実行する

コードの単純化と高速化を実現

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルコード (2.7 KB)

PDOを使用してストアドプロシージャを呼び出す

 PDOのドキュメントには次のように書かれています。

 「PHP Data Objects(PDO)エクステンションは、PHPからデータベースにアクセスするための軽量で一貫性のあるインターフェースを定義するものです。このPDOインターフェースを実装する個々のデータベースドライバが、データベース固有の機能をいつものエクステンション機能として公開できるようにします。PDOエクステンションだけではデータベースの機能は実行できません。データベースサーバにアクセスするためには、データベース固有のPDOドライバを使う必要があります」

※編集部注

 原文では上記引用内のURLがリンク切れだったため、修正しました。

 PDOエクステンションを使うと、アクセスメソッドを変えなくてもバックエンドデータベースを変更できる柔軟性が生まれます。PDOには、MySQLのバージョンに関係なく同じデータアクセスメソッドを使えるメリットがあります。そのため、旧バージョンのMySQLでは標準のMySQLエクステンションを使い、新バージョンではMySQLiエクステンションを使うといったことをしなくて済みます。また、MySQLのバージョンに関係なくオブジェクト指向コードを利用できるメリットもあります。従って、データベース抽象化レイヤに柔軟性が必要なときはPDOでコードの堅牢性と移植性を高め、アプリケーションの動作を高速化したいときは2つのインターフェースのどちらか(MySQLまたはMySQLi)を使います。

 このエクステンションを使うには、次の2行をphp.iniに追加します。

extension=php_pdo.dll
extension=php_pdo_mysql.dll

 上の2行目は、このエクステンションを動かすために必須のMySQLドライバです。次の例では、total_priceストアドプロシージャを呼び出します。

<?php
$pdo = new PDO('mysql:dbname=books;host=127.0.0.1', 'root', '');
print 'PDO: simple select';
$pdo->query( 'CALL total_price(@t)' );
foreach($pdo->query( 'SELECT @t' ) as $row)
{
print_r($row);
}
?>

 出力は次のようになります。

PDO: simple select
Array ( [@t] => 4300 [0] => 4300 )

 特定の行を選択するプロシージャを書くのは簡単です。例えば、次のプロシージャはbookstoreテーブルのレコードのうち、IDが3に等しいものを選択します。

CREATE PROCEDURE proc_new ()
BEGIN
SELECT * from bookstore where id=3;
END

 次の例では、proc_new()を呼び出し、結果を表示します。

<?php
//Connecting to MySQL server and to the books database
$pdo = new PDO('mysql:dbname=books;host=127.0.0.1', 'root', '');
print 'Calling the proc_new() stored procedure using PDO';
foreach($pdo->query( 'CALL proc_new()' ) as $row)
{
print_r($row);
}
?>

 出力は次のようになります。

Calling the proc_new() stored procedure using PDO
Array ( [id] => 3 [0] => 3 
        [book] => Introduction to PHP [1] => 
           Introduction to PHP 
        [author] => Weeling Tom [2] => Weeling Tom 
        [isbn] => 4334-2323-23233-434 [3] => 4334-2323-23233-434 
        [price] => 300 [4] => 300 )

 本稿では、簡単なストアドプロシージャ/ストアドファンクションの作り方と、それらをPHPから呼び出すためのデータベースエクステンション(MySQL、MySQLi、PDO)の使い方を説明しました。これらを必要なときにいつでも利用できるようにしておけば、コードの単純化と高速化を実現でき、同時にアプリケーションがバックエンドデータベースの変更に影響されないようになるので、エラーが全般的に抑えられます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Octavia Andreea Anghel(Octavia Andreea Anghel)

経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4575 2009/12/07 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング