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
パラメータtotal
(int
型)を使用して結果を表示します。
<?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