SHOEISHA iD

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

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

japan.internet.com翻訳記事

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

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

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

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

MySQLデータベースエクステンションを使用してストアドプロシージャを呼び出す

 MySQLデータベースエクステンションはMySQLデータベースサーバーにアクセスできるようにするものです。php_mysql.dllを、他のエクステンションと同じようにインストールします。MySQLの関数の詳しい説明は、ここを参照してください。

 まず、簡単なストアドプロシージャが必要です。このプロシージャ(proc)は、前に作成したbookstoreテーブルのすべてのフィールドを選択します。

CREATE PROCEDURE proc ( )
BEGIN
  SELECT * from bookstore;
END

 次のPHPスクリプトは、MySQLサーバーに接続し、booksデータベースを選択し、procストアドプロシージャ(引数なし)を呼び出し、結果を出力します。

<?php
 //Create the connecting to MySQL
 $con = mysql_connect('localhost','root','',false,65536);
 mysql_select_db('books');
 
 //Call the proc() procedure
 $result= mysql_query("CALL proc();")
 or die(mysql_error());
 
//Output the result
while($row = mysql_fetch_row($result))
{
 for($i=0;$i<=6;$i++){
   echo $row[$i]."<br>";
 }
echo "---";
}
//Close the connection
mysql_close($con);
?>
※著者注

 構文$con = mysql_connect('localhost','root','');ではうまくいきません。ストアドプロシージャからPHPに結果セットを返すためには、マルチステートメント接続オプションかマルチ結果オプション(またはその両方)を使う必要があるからです。ルーチンから結果セットが返されなければ、どちらのオプションも必要ありません。

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

1---Introduction to PHP---Mark User---3334-4424-334-3433---500--------
2---DHTML and CSS---Teague Sanders---4545-23-23-23-23232---1500-------
3---Introduction to PHP---Weeling Tom---4334-2323-23233-434---300-----
4---Web design---Weeling Tom---4334-2323-23233-434---600---------
5---PHP 5---Weeling Tom---444-87-67665-678678---600---------
6---JavaServer Pages---Tick Own---897-9898-987-099---800---------

 次のプロシージャ(total_price)は、bookstoreテーブルのpriceフィールドの総計を計算します。ここでは総計を保持するためにOUTパラメータを使用しています。

CREATE PROCEDURE total_price ( OUT total int)
BEGIN
SELECT sum(price) into total from bookstore;
END

 次のPHPスクリプトは、total_priceプロシージャを呼び出し、OUTパラメータtotalint型)を使用して結果を表示します。

<?php
 $con = mysql_connect('localhost','root','',false,65536);
 mysql_select_db('books');
 
 //Calling the total_price stored procedure using the @t OUT parameter
 $result= mysql_query("CALL total_price(@t);")
 or die(mysql_error());
 
 //Listing the result
 $rs = mysql_query( 'SELECT @t' );
 while($row = mysql_fetch_row($rs))
 {
  echo 'The total price is = '.$row[0];
 }
mysql_close($con);
?>

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

The total price is = 4300

次のページ
MySQLエクステンションを使用してストアドファンクションを呼び出す

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング